为什么验证码错误就要清除缓存呢?

为什么验证码错误就要清除缓存呢?用户点错了,不能才填一次吗?

// 验证错误就清除缓存
\Cache::forget($request->captcha_key);
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
liyu001989
最佳答案

你可以找个有验证码登录的app或网站试一下,一般的流程是输入错误重新获取一个图片,用户重新输入。
因为图片验证码一般4位或6位,不允许用户重试比较安全

6年前 评论
讨论数量: 10
liyu001989

你可以找个有验证码登录的app或网站试一下,一般的流程是输入错误重新获取一个图片,用户重新输入。
因为图片验证码一般4位或6位,不允许用户重试比较安全

6年前 评论
liyu001989

你可以找个有验证码登录的app或网站试一下,一般的流程是输入错误重新获取一个图片,用户重新输入。
因为图片验证码一般4位或6位,不允许用户重试比较安全

6年前 评论

@liyu001989 但是把缓存清除了,里面存储的手机号也没了。那整个注册流程要回到第一步既客户输入手机号去请求图形验证码这一步。用户输错了图形验证码,就要把手机号再重新输入一次,流程是不是不够友好呢?

5年前 评论
liyu001989

@discus2013 安全是第一位的,自己手机号输入错误,从头来一遍是有多不友好。

你要的友好是用户验证码填完了才发现手机号错了,重新输入以后就不用验证码了? 那么发送短信验证码接口为了保证安全,提交上一次的 key ,旧手机号,新手机号,可以成功发送短信验证码,但是只能请求一次?不确定会不会引入安全问题。

5年前 评论

@liyu001989
不是这个意思。我再表达一遍吧。
现在的流程是:1. 用户输入手机号发送post请求,2. 程序接收到手机号存入Cache,生成图形验证码让用户填。
用户输入图形验证码,如果正确程序就发送短信验证码给用户并进入下一步的真正注册,但是如果图形验证码填错了,程序会Forget Cache。Cache里可是有手机号的。也就是说,如果用户的图形验证码填错了(这个很常见吧,特别是图形验证码难认的,大家都有经验),整个流程要从头再来,退回到第1步重新输入手机号。缓存里已经没有手机号了。
当然,这么做是安全的。

5年前 评论
liyu001989

@discus2013 验证码输入错了,客户端自动拿着手机号在请求一次啊,有兴趣你可以购买小程序的教程看看客户端怎么实现

5年前 评论

@discus2013 你说的是接口流程 用户操作流程不是那样的 具体操作和客户端的逻辑有关 客户端有可能是一个步骤一个页面 也有可能是整个注册只有一个页面 输入手机号后 显示一个获取验证码按钮 点击让输入验证码 错误就自动刷新验证码 获取到验证码后 接着在同一个页面输入用户名密码等等 所以说接口流程和用户操作不是必然相关的 你的担心也不存在

5年前 评论
        if (!hash_equals($captchaData['code'], $request->captcha_code)) {
            // 验证错误就清除缓存
            \Cache::forget($request->captcha_key);
            return $this->response->errorUnauthorized('验证码错误');
        }
        // 是否可以将代码后面的遗忘图片验证码的步骤直接移动到这个位置呢?
        \Cache::forget($request->captcha_key);
5年前 评论

在测试环境下,可以吧这个忘记验证码关闭

5年前 评论

只是很多人认为这是最佳实践而已。你也可以根据自己的业务或者项目的复杂度调整。其实也不用纠结与这个。

5年前 评论

不是吧,不用再次输入手机号的。
验证码输入错误 -> 点击刷新验证码
然后客户端直接调用之前输入过的手机号,提交 CaptchaRequst 就能重新请求验证码图片了,这时候会把该验证码和手机号重新存入缓存。
用户再次输入验证码进行请求验证短信。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!