使用 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 你们是怎么处理的呢?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 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'));
}
4年前 评论

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

4年前 评论

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