如何在laravel 8 api中注销和撤销所有oauth令牌?



我用passport和laravel 8构建的api默认不会注销。

我找到了一个脚本,但是它没有删除oauth-access-tokens表中的条目

我给AuthController添加了一个函数:


public function logout(Request $request){
$accessToken = auth()->user()->token();
$token= $request->user()->tokens->find($accessToken);
$token->revoke();
return response(['message'=> 'Je bent uitgelogd'], 200);
}

并在api.php中添加了一个路径:

Route::post( 'logout', 'AppHttpControllersAPIAuthController@logout')->middleware('auth:api'); 

当我尝试使用Postman注销时,我得到一条成功消息,但是oauth-access-token表中的条目没有被删除。

我打算为用户删除所有令牌,从所有设备注销

谁能告诉我我做错了什么?

将注销功能更改为:

public function logout(Request $request){
$user = Auth::user()->token();
$user->revoke();
return response(['message'=> 'Je bent uitgelogd'], 200);
}

这将使用户从他请求注销的当前设备注销。如果你想注销他登录过的所有设备。然后这样做:

use LaravelPassportRefreshToken;
use LaravelPassportToken;
public function logout(Request $request){
$tokens =  $user->tokens->pluck('id');
Token::whereIn('id', $tokens)->update(['revoked', true]);
RefreshToken::whereIn('access_token_id', $tokens)->update(['revoked' => true]);
}

这将撤销发给该用户的所有访问和刷新令牌。

SOLVED:

我使用了以下代码:


use AppHttpControllersController;
use IlluminateHttpRequest;
use AppModelsUser;
use IlluminateSupportFacadesAuth;

和功能:

public function logout(Request $request){
Auth::user()->tokens->each(function($token, $key) {
$token->delete();
});
return response(['message'=> 'Je bent uitgelogd'], 200);

} 

所以没有任何东西被撤销,但是所有的令牌都被删除了。

如果您使用护照,身份验证:用户()→AauthAcessToken()→删除();将删除用户的所有令牌。

在AuthController中,我使用以下代码

public function logout(Request $request) {

$request->user()->token()->revoke();
return response([
"message" => 'Session finished',
],200);

}

最新更新