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

Laravel中Auth::attempt()登录失败,用户已存入数据库该如何排查

问题根因

你调用Auth::attempt()的使用方式完全错误,核心问题有两个:

  • Auth::attempt()第一个参数要求传入包含明文密码的用户凭证数组,方法内部会自动对传入的明文密码做哈希运算,和数据库存储的哈希值做比对。你传入的$user->only(['email','password'])里的password是已经通过Hash::make()处理过的哈希值,相当于用哈希值当明文再次做哈希运算,和数据库的值必然匹配失败
  • Auth::attempt()不支持直接传入Eloquent模型实例作为第一个参数,你写的Auth::attempt($user,true)本身就是无效调用

最优修复方案

注册流程完成后已经拿到了有效的用户模型实例,不需要再走登录验证流程,直接调用Auth::login()手动登录即可:

static function register()
{
    if(self::$validate['message'])
    {
        $user = User::create([
            'name' => self::$values['name'],
            'email' => self::$values['email'],
            'password' => Hash::make(self::$values['password'])
        ]);

        // 直接登录用户,第二个参数传true开启记住我功能
        Auth::login($user, true);

        // 注意你原来的代码里response拼写错误,这里做了修正
        return result::response(true);
    } else 
        return self::$validate;
}

特殊场景下用attempt实现登录的正确写法

如果有特殊需求必须走attempt验证流程,需要传入注册时的明文密码:

// 用注册时输入的明文密码做验证
Auth::attempt([
    'email' => self::$values['email'],
    'password' => self::$values['password']
], true);

内容的提问来源于stack exchange,提问作者Abdalrhman Hussin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:54:03