Laravel使用Passport认证时注册正常登录返回未授权访问如何解决
问题原因与解决方案
核心故障原因
你注册用户时没有对密码字段做哈希加密,Laravel的auth()->attempt()方法会自动将登录请求传入的明文密码做哈希计算后,和数据库存储的密码做比对,明文存储的密码永远无法匹配,所以直接返回401未授权错误。
具体修复步骤
- 第一步:修改注册方法,新增密码加密逻辑
打开passportAuthController的registerUserExample方法,在创建用户前对密码做哈希处理:
public function registerUserExample(RegisterUserRequest $request){ $attributes = $request->validated(); // 新增密码加密代码 $attributes['password'] = \Illuminate\Support\Facades\Hash::make($attributes['password']); $user = User::create($attributes); $access_token_example = $user->createToken('RegisterToken')->accessToken; return response()->json(['token'=>$access_token_example],200); }
修改完成后重新注册新用户再测试登录即可,原有已注册的用户因为密码是明文,无法正常登录需要重新注册。
- 第二步:校验Passport基础配置
- 打开
config/auth.php,确认api guard的驱动设置为passport:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
- 确认
App\Models\User模型已经引入Passport的HasApiTokenstrait:
use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // 其余模型代码 }
- 第三步:校验请求参数与缓存
- 登录请求需要使用POST方法,请求头设置
Content-Type: application/json,请求体示例:
{ "email": "注册时填写的邮箱", "password": "注册时填写的明文密码" }
- 执行以下命令清理配置与路由缓存:
php artisan config:clear php artisan route:clear
内容的提问来源于stack exchange,提问作者Dan Alexandru
相关产品推荐
相关产品推荐

