我正在使用PKCE授权码授予。我尝试通过API撤销令牌,没有问题(路由在auth:api中间件下)。但是,服务器端会话没有结束,当我再次尝试登录时,它跳过登录表单并跳转到授权提示或只是回调页面。我尝试在Web中间件中创建一个路由,该路由会终止会话,但始终存储cookie“laravel_session”和“XSRF-TOKEN”,并且无法删除它们。
我想让用户点击注销按钮,从移动的应用程序和用户应通过整个oauth2流程时,再次登录,而不是跳过登录表单在服务器端。
public function logoutAPI(){
//clear server side session
Auth::guard('web')->logout();
Session::flush();
// logout and revoke mobile app token
Auth::user()->token()->revoke();
$tokenId = Auth::user()->token()->id;
$tokenRepository = app('Laravel\Passport\TokenRepository');
$refreshTokenRepository = app('Laravel\Passport\RefreshTokenRepository');
$tokenRepository->revokeAccessToken($tokenId);
$refreshTokenRepository->revokeRefreshTokensByAccessTokenId($tokenId);
return response()->json([
'msg' => 'You have been succesfully logged out'
],200);
请注意,我不会使用其他授权类型作为此处的参考https://oauth2.thephpleague.com/authorization-server/which-grant/
1条答案
按热度按时间6ss1mwsb1#
在Laravel Passport〉= 11.3上重定向授权时,您可以使用
prompt=login
。这会导致应用始终提示用户重新登录应用,即使他们已经有一个现有会话。查看文档了解更多信息:https://laravel.com/docs/9.x/passport#requesting-tokens-redirecting-for-authorization