使用 jetstream 方式的登录如何自定义验证规则

Laravel 8 的用户认证使用了 jetstream 扩展包进行处理,jetstream 扩展包里使用了 Fortify 扩展包做了认证相关工作。

根据文档提示,我们也可以进行对登录操作进行自定义,可登录页面的验证它使用了 Request 的方式做的,文件是 Laravel\Fortify\Http\Requests\LoginRequest 类,在 rules 方法中固定了写法,我们要如何添加验证呢?如何去覆盖或者重写这个方法。

例如我要增加一个对验证码写规则进行验证,这样写也不可以用,因为这样会和 Request 验证的方式冲突,导致重复验证。

Fortify::authenticateUsing(function (Request $request) {

    $request->validate([
         'validCode' => 'required|captcha'
    ]);

    $user = User::where('email', $request->email)->first();

    if ($user &&  Hash::check($request->password, $user->password)) {
            return $user;
        }
    });
}

so 你们是怎么处理的呢?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

目前看只能用 手动验证用户 的方法来处理了,不能使用 Fortify::authenticateUsing 的方法来做。正准备向 Fortify 提交个 PR,把登录额外的验证写在配置文件中,然后取实现该功能。

config\fortify.php 新增代码

/*
|--------------------------------------------------------------------------
| 自定义登录业务验证信息
|--------------------------------------------------------------------------
|
| 在登录业务中,添加额外的验证规则。
| 例如:
|    登录时,额外增加验证的必须输入和正确性验证
|
*/

'rules' => [
    'login' => [
        'validCode' => 'required|captcha'
    ]
],

Laravel\Fortify\Http\Requests\LoginRequest.php 更新 rules() 方法

public function rules()
{
    return array_merge([
        Fortify::username() => 'required|string',
        'password' => 'required|string',
    ], config('fortify.rules.login'));
}
3年前 评论

项目中暂时使用 laravel/breeze 扩展包来处理用户认证业务,目前看更适合。

3年前 评论

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