Laravel 8自定义登录方法如何让estado字段同时接受1、2两个有效值
解决方案
Laravel 内置的 guard()->attempt() 方法默认对传入的凭证数组做键值全等匹配,所以你原来直接给$credentials['estado']赋值1只能匹配estado=1的用户,无法直接支持多值匹配,需要调整实现逻辑。
推荐实现方案(无额外依赖、兼容性强)
直接手动校验用户状态和密码,再触发登录逻辑,代码如下:
protected function attemptLogin(Request $request) { $credentials = $this->credentials($request); // 排除密码字段,先按用户名/邮箱查询符合状态要求的用户 $user = \App\Models\User::where(array_except($credentials, 'password')) ->whereIn('estado', [1, 2]) // 限定允许登录的estado值为1或2 ->first(); // 验证用户存在、密码正确后,手动执行登录 if ($user && \Hash::check($credentials['password'], $user->password)) { $this->guard()->login($user, $request->filled('remember')); return true; } return false; }
注意事项
- 代码中的
\App\Models\User请替换为你实际项目里的用户模型类路径 - 如果运行提示
array_except函数不存在,可使用Laravel的Arr门面实现同等功能:
先在文件顶部引入门面:
再把use Illuminate\Support\Arr;array_except($credentials, 'password')替换为Arr::except($credentials, 'password')即可 - 后续要新增允许登录的estado值,直接修改
whereIn方法的第二个参数数组即可
内容的提问来源于stack exchange,提问作者Diego Utreras
相关产品推荐
相关产品推荐

