Después de mucho luchar ya encontramos la contestación de esta contrariedad que muchos lectores de esta web han tenido. Si quieres aportar algún detalle puedes compartir tu conocimiento.
Solución:
Asegúrate de que en User
modelo, tienes este importado
use LaravelPassportHasApiTokens;
y estás usando el rasgo HasApiTokens
utilizando
use HasApiTokens
dentro de la clase de usuario. Ahora crea la ruta de cierre de sesión y en el controlador, haga esto
$user = Auth::user()->token();
$user->revoke();
return 'logged out'; // modify as per your need
Esto cerrará la sesión del usuario del dispositivo actual en el que solicitó cerrar sesión. Si desea cerrar sesión en todos los dispositivos en los que ha iniciado sesión, haga esto en su lugar
DB::table('oauth_access_tokens')
->where('user_id', Auth::user()->id)
->update([
'revoked' => true
]);
Esto cerrará la sesión del usuario en todas partes. Esto realmente ayuda cuando el usuario cambia su contraseña usando la opción restablecer contraseña u olvidar la contraseña y tiene que cerrar la sesión del usuario desde cualquier lugar.
Debe eliminar el token de la tabla de la base de datos. oauth_access_tokens
puedes hacerlo creando un nuevo modelo como OauthAccessToken
-
Ejecute el comando
php artisan make:model OauthAccessToken
para crear el modelo. -
Luego crea una relación entre el
User
modelo y el nuevo creadoOauthAccessToken
modelo, enUser.php
agregar :public function AauthAcessToken() return $this->hasMany('AppOauthAccessToken');
-
en UserController.php, cree una nueva función para cerrar sesión:
public function logoutApi() if (Auth::check()) Auth::user()->AauthAcessToken()->delete();
-
En el enrutador api.php, cree una nueva ruta:
Route::post('logout','[email protected]');
- Ahora puede cerrar sesión llamando a publicar en URL
/api/logout
Este es el código de muestra que utilizo para cerrar la sesión
public function logout(Request $request)
$request->user()->token()->revoke();
return response()->json([
'message' => 'Successfully logged out'
]);