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.

16
demandé sur Martijn Pieters 2017-04-10 11:32:34

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

  1. Exécuter la commande php artisan make:model OauthAccessToken pour créer le modèle.

  2. puis créer une relation entre les User modèle et le nouveau OauthAccessToken Modèle User.php ajouter :

    public function AauthAcessToken(){
        return $this->hasMany('\App\OauthAccessToken');
    }
    
  3. dans UserController.php , créer une nouvelle fonction pour déconnexion:

    public function logoutApi()
    { 
        if (Auth::check()) {
           Auth::user()->AauthAcessToken()->delete();
        }
    }
    
  4. dans api.routeur php, créer une nouvelle route:

     Route::post('logout','UserController@logoutApi');
    
  5. Maintenant, vous pouvez vous déconnecter en appelant l'affichage de l'URL /api/logout
13
répondu Mahdi 2017-10-24 08:14:15
$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);
    }
8
répondu PHP Worm... 2018-03-19 09:16:13