发送短信验证码限流了,但是手机号已经存在报错,怎么删除限流器

这是路由代码

Route::post('verificationCodes/register', [VerificationCodesController::class, 'register'])->middleware(['throttle:verification'])
        ->name('verificationCodes.register');

使用了FormRequest验证

class RegisterVerificationCodeRequest extends FormRequest
{  
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
     */
    public function rules(): array
    {
        return [
            'phone' => [
                'required',
                'regex:/^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199)\d{8}$/',
                'unique:users'
            ]
        ];
    }
}

你们是怎么解决手机号提示已经存在,然后顺便把限流清除的

RateLimiter::for('verification', function (Request $request) {
            return Limit::perMinute(1)->response(function (Request $request, array $headers) {
                return response(['message' => '短信获取间隔60秒,请勿频繁发送'], 429, $headers);
            })->by($request->phone);
        });

一分钟只能请求一次对不,那么请求的时候发现手机号已经存在,那么就意味着还的再等一分钟,我想在报错的时候,顺便把请求器给清空一下

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

半天没看懂

8个月前 评论
sanders

没明白楼主的问题,手机号已存在的异常跟限流应该没有关系?仅仅是触发了请求的规则。

说一下我的理解:如果短信通道侧对验证码有较严格的下发规则,发验证码的限流不要在入口(中间件)做,应该在下发的逻辑中根据手机号和短信类型(模板)限流。

楼主的异常应该是 'unique:users' 这个规则引发的,这个查询也不建议在入口(请求规则)做,应在下发逻辑前进行验证查询。

8个月前 评论

Request 类里面实现 failedValidation 方法(验证失败时执行)、或者 passedValidation(验证结束时执行,无论失败、成功)。

在这里面处理就好了

8个月前 评论
深蓝色 (楼主) 8个月前
深蓝色 (楼主) 8个月前
Rache1 (作者) 8个月前
深蓝色 (楼主) 8个月前

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