tutorial sistema restful parte español create con autenticación laravel laravel-passport

sistema - logout api laravel passport



Cómo cerrar la sesión de un usuario de la API utilizando laravel Passport (4)

Asegúrate de que en el modelo de User , tengas este

use Laravel/Passport/HasApiTokens;

y estás usando el rasgo HasApiTokens usando

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 desde el dispositivo actual donde solicitó cerrar sesión. Si desea desconectarse de 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 desde todas partes. Esto realmente es de gran ayuda cuando el usuario cambia su contraseña usando la opción para restablecer la contraseña o olvidar la contraseña y usted debe cerrar la sesión del usuario desde cualquier lugar.

Actualmente estoy usando 2 proyectos. 1 extremo frontal (con backend de laravel para comunicarse con la API) y otro proyecto de laravel (la API).

Ahora utilizo Laravel Passport para autenticar a los usuarios y para asegurarme de que cada llamada a la API sea una llamada autorizada.

Ahora, cuando quiero desconectar a mi usuario, envío una solicitud de publicación a mi API (con el token de portador) y trato de desconectarlo de la API (y borrar sesión, cookies, ...)

Luego, en el cliente también actualizo mi sesión para que ya no se conozca el token. Ahora cuando vuelvo a la página de inicio de sesión, inicia sesión automáticamente en mi usuario. (O mi usuario todavía está conectado).

¿Puede alguien explicarme cómo cerrar correctamente la sesión de un usuario con el pasaporte de Laravel?

Gracias por adelantado.


Crear una ruta para cerrar sesión:

$router->group([''middleware'' => ''auth:api''], function () use ($router) { Route::get(''me/logout'', ''UserController@logout''); });

Cree una función de cierre de sesión en userController (o como se menciona en su ruta)

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); }


Este es un código de muestra que estoy usando para cerrar sesión

public function logout(Request $request) { $request->user()->token()->revoke(); return response()->json([ ''message'' => ''Successfully logged out'' ]); }


Necesitas eliminar el token de la tabla de la base de datos oauth_access_tokens puedes hacerlo al crear un nuevo modelo como OauthAccessToken

  1. Ejecute el comando php artisan make:model OauthAccessToken para crear el modelo.

  2. Luego cree una relación entre el modelo de User y el nuevo modelo OauthAccessToken creado, en User.php add:

    public function AauthAcessToken(){ return $this->hasMany(''/App/OauthAccessToken''); }

  3. en UserController.php, cree una nueva función para cerrar sesión:

    public function logoutApi() { if (Auth::check()) { Auth::user()->AauthAcessToken()->delete(); } }

  4. En el enrutador api.php, crea una nueva ruta:

    Route::post(''logout'',''UserController@logoutApi'');

  5. Ahora puede cerrar sesión llamando a la URL /api/logout