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

Laravel Passport API中Auth::attempt验证失败问题求助

Laravel Passport API中Auth::attempt验证始终失败的排查方案

我之前在做Laravel Passport API的时候也踩过一模一样的坑,明明凭证是对的,密码也用bcrypt加密了,但Auth::attempt()就是返回null,给你几个最常见的排查方向:

1. 明确指定API Guard进行验证

默认情况下,Auth::attempt()会使用配置文件里的默认Guard(一般是web),但你的API接口应该用api Guard来验证。你可以在调用时明确指定Guard:

if(Auth::guard('api')->attempt(['email' => $request->email, 'password' => $request->password])){
    return 'hello';
}

2. 开启API Guard的哈希验证开关

看你的Auth配置里,api Guard的'hash' => false被注释掉了,这大概率是问题核心!Passport的API Guard默认是不启用密码哈希验证的,但你的密码是用bcrypt加密存储的,必须开启这个选项:

'api' => [
    'driver' => 'passport',
    'provider' => 'users',
    'hash' => true, // 取消注释并设置为true
],

3. 确认用户密码的加密流程正确

一定要确保你创建用户时,密码是通过Laravel的加密工具处理过的,比如:

// 正确的用户创建示例
User::create([
    'name' => 'Test User',
    'email' => 'test@example.com',
    'password' => bcrypt('your-password'), // 或者用 Hash::make('your-password')
    'verified' => 1
]);

如果是手动在数据库里直接输入明文密码,那肯定无法通过验证,因为Auth::attempt()会自动对传入的明文密码做哈希比对,而数据库里的明文和哈希后的字符串不匹配。

4. 检查User模型的认证字段设置

确认你的App\Models\User模型没有重写getAuthPassword()方法,如果重写了,要保证它返回的是数据库中存储加密密码的字段(默认就是password字段,一般不会有问题,但还是可以检查一下)。

先试试前两个方案,这俩是解决这个问题最常见的办法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:42:37