Laravel Passport注册接口响应无法获取token字符串的解决办法
解决Laravel Passport注册接口返回Token元数据的问题
原因说明
你当前接口返回的是个人访问令牌的元数据信息,未返回明文token字符串,是两个常见配置错误导致:
App\Models\User模型中错误引入了Laravel Sanctum的HasApiTokenstrait,而非Passport提供的对应trait- 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
相关产品推荐
相关产品推荐

