Laravel 登录验证小技巧

我们经常会用到一个boolean字段来确定用户是否已经停用,比如

...
$table->boolean('enabled')->default(true);
...

admin_users.enabled 字段,为0时表示已禁用.

在laravel-admin的源代码中是有迁移文件的,我的习惯做法是copy出来, 按自己的需求改, 也可以直接在admin.php中指定数据表名称,只要字段格式都是一致的,也不会影响到整个Larave-Admin的运行

最简单的办法是可以使用exists验证规则,通过添加对比对字段(username),同时对比的字段添加where条件enabled必须 等于1(true)时,那么如果当enabled等于0(false),则不会找到这个字段,所以会报一个错误 "选定的 用户名 字段是无效的." 然后再覆盖这个消息,'exists' => '该用户已停用!'

$credentials = $request->only(['username', 'password']);
$validator = Validator::make($credentials, [
    'username' => 'required|string|exists:admin_users,username,enabled,1',
    'password'        => 'required|string',
], [
    'exists' => '该用户已停用!',
]);

如果使用了验证码(本例使用的是"mews/captcha")

$credentials = $request->only([$this->username(), 'password', 'captcha']);
$validator = Validator::make($credentials, [
    $this->username() => 'required|string | exists:admin_users,username,enabled,1',
    'password'        => 'required|string',
    'captcha'         => 'required|captcha',
], [
    'captcha.required' => '请填写验证码',
    'captcha.captcha'  => '验证码错误',
    'exists'           => '该用户已停用!',
]);

亲测通过