You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:39:04