J'utilise actuellement 2 projets. 1 front end (avec laravel backend pour communiquer avec API) et un autre projet laravel (API).
J'utilise maintenant Laravel Passport pour authentifier les utilisateurs et pour m'assurer que chaque appel d'API est un appel autorisé.
Désormais, lorsque je souhaite déconnecter mon utilisateur, j'envoie une demande de publication à mon API (avec jeton porteur) et tente de le déconnecter de l'API (et d'effacer la session, les cookies, ...).
Ensuite, sur le client, j'actualise également ma session pour que le jeton ne soit plus connu. Maintenant, lorsque je retourne à la page de connexion, il se connecte automatiquement à mon utilisateur. (Ou mon utilisateur est toujours connecté).
Quelqu'un peut-il m'expliquer comment déconnecter correctement un utilisateur avec un passeport Laravel?
Merci d'avance.
Vous devez supprimer le jeton de la table de la base de données oauth_access_tokens
Vous pouvez le faire en créant un nouveau modèle comme OauthAccessToken
.
Exécutez la commande php artisan make:model OauthAccessToken
pour créer le modèle.
Créez ensuite une relation entre le modèle User
et le nouveau modèle OauthAccessToken
créé. Dans User.php
, ajoutez:
public function AauthAcessToken(){
return $this->hasMany('\App\OauthAccessToken');
}
dans UserController.php, créez une nouvelle fonction pour vous déconnecter:
public function logoutApi()
{
if (Auth::check()) {
Auth::user()->AauthAcessToken()->delete();
}
}
Dans le routeur api.php, créez un nouvel itinéraire:
Route::post('logout','UserController@logoutApi');
/api/logout
Créez un itinéraire pour vous déconnecter:
$router->group(['middleware' => 'auth:api'], function () use ($router) {
Route::get('me/logout', 'UserController@logout');
});
Créez une fonction de déconnexion dans userController (ou comme mentionné dans votre 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);
}
Assurez-vous que dans le modèle User
, vous avez ce fichier importé.
use Laravel\Passport\HasApiTokens;
et vous utilisez le trait HasApiTokens
en utilisant
use HasApiTokens
dans la classe d’utilisateurs . Maintenant, vous créez la route de déconnexion et dans le contrôleur, procédez comme suit
$user = Auth::user()->token();
$user->revoke();
return 'logged out'; // modify as per your need
Cela déconnectera l'utilisateur du périphérique actuel sur lequel il a demandé de se déconnecter. Si vous souhaitez vous déconnecter de tous les appareils sur lesquels il est connecté, faites-le à la place.
DB::table('oauth_access_tokens')
->where('user_id', Auth::user()->id)
->update([
'revoked' => true
]);
Cela déconnectera l'utilisateur de partout. Cela vient vraiment en aide lorsque l'utilisateur modifie son mot de passe à l'aide de l'option réinitialiser le mot de passe ou mot de passe oublié et que vous devez le déconnecter de partout.
Ceci est un exemple de code utilisé pour me déconnecter
public function logout(Request $request)
{
$request->user()->token()->revoke();
return response()->json([
'message' => 'Successfully logged out'
]);
}