Код: Выделить всё
public function sso_logout(Request $request)
{
//Capture the redirect_uri from the session if available
$redirectUri = session('redirect_uri', "https://default.com");
//Revoke access and refresh tokens
$user = $request->user('api');
if ($user) {
$token = $user->token();
$tokenRepository = app(TokenRepository::class);
$refreshTokenRepository = app(RefreshTokenRepository::class);
// Revoke an access token...
$tokenRepository->revokeAccessToken($token->id);
// Revoke all of the token's refresh tokens...
$refreshTokenRepository->revokeRefreshTokensByAccessTokenId($token->id);
}
//Signout the user
$this->guard()->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
if ($response = $this->loggedOut($request)) {
return $response;
}
if ($redirectUri != "https://default.com") {
//get domain from redirect_uri
$redirectUri = parse_url($redirectUri, PHP_URL_SCHEME) . '://' . parse_url($redirectUri, PHP_URL_HOST) ;
}
return $request->wantsJson()
? new JsonResponse([], 204)
: redirect($redirectUri);
}
< /code>
Эта функция доступна по маршруту, зарегистрированному в web.php: < /p>
Route::get('/sso/logout', [LoginController::class, 'sso_logout'])->name('sso.logout');
< /code>
Работает отзыв к токену доступа и обновления, я вижу, что правильные токены отозваны в базе данных. Но манипуляция с сеансом, похоже, не работает.
Я также пытался явно заявить о защите: < /p>
Auth::guard('web')->logout();
Код: Выделить всё
Session::flush();
Cookie::queue(Cookie::forget('laravel_token'));
Cookie::queue(Cookie::forget('pegasus_api_session'));
Подробнее здесь: https://stackoverflow.com/questions/796 ... ver-logout
Мобильная версия