我们经常会用到一个boolean字段来确定用户是否已经停用,比如
...
$table->boolean('enabled')->default(true);
...
admin_users.enabled 字段,为0时表示已禁用.
最简单的办法是可以使用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(['username' 'password', 'captcha']);
$validator = Validator::make($credentials, [
'username' => 'required|string | exists:admin_users,username,enabled,1',
'password' => 'required|string',
'captcha' => 'required|captcha',
], [
'captcha.required' => '请填写验证码',
'captcha.captcha' => '验证码错误',
'exists' => '该用户已停用!',
]);
另: 这里使用的是laravel-admin 代码稍微有点差异, 但思路是没有问题的
亲测通过
本文介绍了在 Laravel 中如何利用 `exists` 验证规则结合条件查询来确保只有启用的用户才能通过登录验证。通过在验证时添加一个 `where` 条件,当 `admin_users.enabled` 为 0(表示用户已被禁用)时,系统会返回一个自定义错误消息:“该用户已停用!”。此外,还提及了在使用 "mews/captcha" 验证码时的情况,以及在 laravel-admin 框架下类似的方法。
269

被折叠的 条评论
为什么被折叠?



