我刚刚部署了一个基于Laravel 9 Passport的API到Digital Ocean。一切正常,但是当我尝试登录用户或管理员并创建要存储和返回的令牌时,我得到500服务器错误。
我已经运行php artisan passport:keys. 因为它不工作,我尝试通过.env通过传递密钥。,但仍然得到错误。这是我的LoginController:
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (!Auth::attempt($credentials)) {
return response()->json([
'message' => 'Usuario y/o contraseña inválidas'
], 401);
}
// If I comment this line and the accessToken in the json response, and return just the Auth::user(), it works fine
$accessToken = Auth::user()->createToken('my_token')->accessToken;
return response()->json([
'user' => Auth::user(),
'accessToken' => $accessToken
], 200);
}
这是我的AuthServiceProvider.php启动方法:
public function boot()
{
$this->registerPolicies();
/* Passport::routes(); */
if (!$this->app->routesAreCached()) {
Passport::routes();
}
/**
* Controls the expire time for the access token
*/
Passport::personalAccessTokensExpireIn(now()->addDays(30));
Passport::tokensCan([
'admin' => 'Admin',
'user' => 'User',
]);
}
在Laravel和nginx的日志中都没有记录相关的错误。谢谢你的帮助。
所以我猜出了解决方案。我尝试捕获accesstoken行并将调试设置为true。它缺少个人客户端ID,所以我运行php artisan passport: Client—Personal
发生这种情况是因为客户端id是在您第一次运行artisan passport:install时自行生成的。但是当你克隆一个repo并运行一个迁移和一个编译器安装命令时,你真的不会运行passport:install,所以一个新的客户端个人id必须手动运行。