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

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基础配置
  1. 打开config/auth.php,确认api guard的驱动设置为passport:
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],
  1. 确认App\Models\User模型已经引入Passport的HasApiTokens trait:
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
    // 其余模型代码
}
  • 第三步:校验请求参数与缓存
  1. 登录请求需要使用POST方法,请求头设置Content-Type: application/json,请求体示例:
{
    "email": "注册时填写的邮箱",
    "password": "注册时填写的明文密码"
}
  1. 执行以下命令清理配置与路由缓存:
php artisan config:clear
php artisan route:clear

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:54:05