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

Laravel Passport注册接口响应无法获取token字符串的解决办法

解决Laravel Passport注册接口返回Token元数据的问题

原因说明

你当前接口返回的是个人访问令牌的元数据信息,未返回明文token字符串,是两个常见配置错误导致:

  1. App\Models\User模型中错误引入了Laravel Sanctum的HasApiTokens trait,而非Passport提供的对应trait
  2. Passport v9及以上版本中,createToken()方法返回的PersonalAccessTokenResult实例,明文token需要通过plainTextToken属性获取,你当前使用的accessToken是旧版本的调用方式。

调整步骤

1. 修正User模型的Trait引入

打开app/Models/User.php,确保头部引入Passport的HasApiTokens,且类中使用该trait:

use Laravel\Passport\HasApiTokens; // 注意不要引成Sanctum的同名trait

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
    // 其余原有代码保持不变
}

2. 修改控制器中Token获取逻辑

将你注册方法中获取token的行,把accessToken替换为plainTextToken,修改后的控制器完整代码如下:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
class ApiController extends Controller
{
    public function register(Request $request) 
    { 
        $validator = \Validator::make($request->all(), [ 
            'name' => 'required', 
            'email' => 'required|email|unique:users', // 建议增加unique校验避免重复邮箱注册
            'password' => 'required', 
        ]);
        if ($validator->fails()) { 
            return response()->json(['error'=>$validator->errors()], 422); // 参数校验错误推荐用422状态码而非401
        }
        $input = $request->all(); 
        $input['password'] = \Hash::make($input['password']); 
        $user = User::create($input); 
        // 仅修改这一行,把accessToken改为plainTextToken
        $success['token'] =  $user->createToken('MyApp')->plainTextToken; 
        $success['name'] =  $user->name;
        return response()->json(['success'=>$success],200); 
    }
}

修改后调用接口即可在返回的success.token字段中拿到完整的明文token字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:39:01