我想给一些接口添加验证码,验证码的生成和校验都在服务端,客户端只需要通过服务器提供的接口获取验证码,比如登录,注册接口,用户登错超过 5 次需要填写验证码,而注册一开始就要有验证码,那服务器如何去控制这个次数,我的想法是通过 redis 来记录,但是服务器如何控制知否应该给客户端验证码呢?没有做过这类的功能,希望有经验的伙伴可以指点一下,非常感谢!
记录到用户的 Session 里面
#1 楼 @huacnlee 这样要限定服务端 Session,不然可以清空。
#2 楼 @rei 哦,对,我想错了
redis 不错,楼主可以把自己方案写出来,然后别人才能提供意见。
基于 日期YYMMDD+user_id 作为 key,记录尝试失败的次数,记录到有 LRU 机制的 Cache 里面,比如 Memcached
日期YYMMDD+user_id
@rei @huacnlee 当客户端拉取验证码的时候,服务器会生成一个 sessionID 来关联用户,不管用户输入的验证码是对还是错,都会重新生成验证码,生成的验证码会以 seesionid 为 key 存在 redis 里面,需要校验的时候从 redis 中取出来进行校验,然后就销毁掉。问题的关键在于提供验证码的接口怎么去判断是登录还是注册来调用它。
登录和注册有什么不同?
@rei 登录要 5 次错误才出现验证码,而注册页面直接就有验证码
#8 楼 @jasonliu 这是两个 action,应该在两个 action 里面判断是否 需要 验证码,而不是在验证码接口判断是否 提供。
@rei 这个主意不错,我可以为登录单独添加一个接口去判断是否应该提供验证码,而注册就直接去拉验证码就好了