Comment déconnecter un utilisateur de L'API en utilisant laravel Passport
j'utilise actuellement 2 projets. 1 front end (avec laravel backend pour communiquer avec API) et un autre projet laravel (L'API).
maintenant J'utilise Laravel Passport pour authentifier les utilisateurs et m'assurer que chaque appel API est un appel autorisé.
maintenant, quand je veux déconnecter mon utilisateur, j'envoie une requête post à mon API (avec détenteur de token) et j'essaie de le déconnecter de L'API (et effacer la session, les cookies,...)...)
puis sur le client je rafraîchis aussi ma session donc le jeton n'est plus connu. Maintenant, quand je retourne à la page de connexion, il se connecte automatiquement dans mon utilisateur. (Ou mon utilisateur est toujours connecté).
quelqu'un Peut-il m'expliquer comment déconnecter un utilisateur avec Laravel passeport?
Merci d'avance.
2 réponses
Vous devez supprimer le jeton de la table de base de données oauth_access_tokens
vous pouvez le faire en créant un nouveau modèle comme OauthAccessToken
Exécuter la commande
php artisan make:model OauthAccessToken
pour créer le modèle.puis créer une relation entre les
User
modèle et le nouveauOauthAccessToken
ModèleUser.php
ajouter :public function AauthAcessToken(){ return $this->hasMany('\App\OauthAccessToken'); }
dans UserController.php , créer une nouvelle fonction pour déconnexion:
public function logoutApi() { if (Auth::check()) { Auth::user()->AauthAcessToken()->delete(); } }
dans api.routeur php, créer une nouvelle route:
Route::post('logout','UserController@logoutApi');
- Maintenant, vous pouvez vous déconnecter en appelant l'affichage de l'URL
/api/logout
$router->group(['middleware' => 'auth:api'], function () use ($router) {
Route::get('me/logout', 'UserController@logout');
});
Créer une fonction de déconnexion dans userController ( ou comme indiqué dans l'itinéraire)
public function logout() {
$accessToken = Auth::user()->token();
DB::table('oauth_refresh_tokens')
->where('access_token_id', $accessToken->id)
->update([
'revoked' => true
]);
$accessToken->revoke();
return response()->json(null, 204);
}