我真的需要帮忙做一件我想做的小事。我尝试在我的laravel / Vue设置中为一个用户使用并发personal_access_tokens。一切正常,除了一件事,当用户注销时,我想删除一个令牌的id。通过一个用户的登录,我为他们创建了一个personal_access_token。在注销时,应该删除这个特定的access_token。
现在,在我的注销方法中,我删除了所有令牌。这很好,但是当删除一个特定的令牌(应该可以工作)时,我总是会发现这个方法不存在的错误:
public function logout(Request $request){
Auth::guard('web')->logout();
// First try: auth()->user()->currentAccessToken()->delete();
// Second try: $request->user()->token()->revoke();
auth()->user()->tokens()->delete();
}
错误:
LOG.error:调用未定义的方法Laravel\Sanctum\TransientToken::delete() {"userId":18,“异常”:{}
api.php
Route::group(['middleware' => 'auth:sanctum'], function () {
Route::post('/logout', [AuthController::class, 'logout']);
});
我试着从以下几个方面着手:
https://laracasts.com/discuss/channels/laravel/passport-how-can-i-manually-revoke-access-token (护照) https://laracasts.com/discuss/channels/laravel/deleting-users-passport-token-on-logout https://divinglaravel.com/authentication-and-laravel-airlock https://laracasts.com/discuss/channels/laravel/spa-and-mobile-logout?page=1&replyId=698040
在所有这些线程中,所使用的方法应该有效,但对我不起作用。我是不是忽略了什么?
我很感激每一个人的帮助!
发布于 2021-08-08 22:54:12
我也有同样的问题,调用auth()->user()->currentAccessToken()->delete()
会给出错误Call to undefined method Laravel\\Sanctum\\TransientToken::delete()
。
我发现这是因为桑克顿认证警卫的工作方式。当一个Laravel会话已经就位时,通过会话cookie,守护程序将一个TransientToken放在用户上,然后通过currentAccessToken()
返回。但是,这个TransientToken
不是真正的PersonalAccessToken
,也没有delete()
方法。
这是在这里的源代码中发现的。
我的方法是将注销路由不是放在web组中,而是放在api组中,它不包括会话的中间件。
发布于 2021-12-12 10:51:33
我也面临同样的问题,如果用户是通过会话/cookie登录的,Laravel似乎使用TransientToken作为默认令牌类而不是PersonalAccessToken。而且TransientToken只有can/ And方法,所以它不支持delete()或->id属性。
因此,我所做的是检查currentAccessToken对象是否有delete方法,如果有,我使用它,如果没有,我将进一步删除会话。
if(method_exists(auth()->user()->currentAccessToken(), 'delete')) {
auth()->user()->currentAccessToken()->delete();
}
auth()->guard('web')->logout();
发布于 2021-07-05 11:31:24
对于特定用户:
Auth::user()->tokens()->where('id', $id)->delete();
对于想要注销的被请求用户
$user = request()->user();
$user->tokens()->where('id', $user->currentAccessToken()->id)->delete();
https://stackoverflow.com/questions/68255192
复制相似问题