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

Laravel 11中Auth::attempt验证失败:提示密码未使用Bcrypt算法

Laravel 11 Auth::attempt 认证失败问题排查

问题描述

调用Auth::attempt($credentials)时认证失败,已参照Laravel 11官方认证文档操作。

已创建如下数据播种器:

$hashedPassword = Hash::make('password');
User::factory()->create([
    'name' => 'Admin User',
    'login' => 'admin',
    'password' => $hashedPassword,
    'role' => 'Admin',
]);

数据库中密码已完成哈希存储(附PhpMyAdmin截图)。

登录逻辑代码如下:

public function loginUser(Request $request)
{
    $credentials = $request->only('login', 'password');

    if (Auth::attempt($credentials)) {
        $request->session()->regenerate();

        return redirect()->intended('/');
    }

    return back()->withErrors(['login' => 'Invalid login or password']); // Redirect back with error message
}

即使数据库密码已哈希处理,仍返回认证错误,请问遗漏了什么?

排查方案

  • 指定认证字段
    Laravel默认以email作为认证的用户名标识,如果你使用login字段作为登录标识,需要在User模型中添加方法指定:

    public function username()
    {
        return 'login';
    }
    

    也可以修改config/auth.php配置文件,在providers.users节点中添加username参数:

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
            'username' => 'login',
        ],
    ],
    
  • 验证密码哈希有效性
    可以通过Laravel Tinker执行Hash::check('password', $user->password)($user为查询到的Admin User实例),确认密码与哈希值是否匹配,排查哈希过程是否异常。

  • 检查请求参数
    打印$credentials确认前端提交的login和password参数值正确,无拼写错误(比如将login写成username)。

  • 确认User模型的认证基础
    确保User模型继承了Illuminate\Foundation\Auth\User类,或者引入了Illuminate\Auth\Authenticatable trait,这是Laravel认证系统的必要条件:

    use Illuminate\Foundation\Auth\User as Authenticatable;
    
    class User extends Authenticatable
    {
        // 模型属性及方法
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:42:33