Как выйти из API с помощью паспорта laravel

В настоящее время я использую 2 проекта. 1 (с поддержкой laravel для связи с API) и другим проектом laravel (API).

Теперь я использую Laravel Passport для аутентификации пользователей и чтобы каждый вызов API был авторизованным.

Теперь, когда я хочу выйти из своего пользователя, я отправляю почтовый запрос в свой API (с маркером-носителем) и пытаюсь вывести его из API (и очистить сеанс, файлы cookie,...)

Затем на клиенте я также обновляю сеанс, чтобы токен больше не был известен. Теперь, когда я возвращаюсь на страницу входа в систему, он автоматически регистрируется у моего пользователя. (Или мой пользователь только что вошел в систему).

Может кто-нибудь объяснить мне, как правильно выходить из системы с помощью паспорта Laravel?

Спасибо заранее.

Ответ 1

Вам нужно удалить токен из таблицы базы данных oauth_access_tokens вы можете сделать это, создав новую модель типа OauthAccessToken

  • Запустите команду php artisan make:model OauthAccessToken, чтобы создать модель.

  • Затем создайте связь между моделью User и новой созданной моделью OauthAccessToken в User.php add:

    public function AauthAcessToken(){
        return $this->hasMany('\App\OauthAccessToken');
    }
    
  • в UserController.php, создайте новую функцию для выхода из системы:

    public function logoutApi()
    { 
        if (Auth::check()) {
           Auth::user()->AauthAcessToken()->delete();
        }
    }
    
  • В маршрутизаторе api.php создайте новый маршрут:

     Route::post('logout','[email protected]');
    
  • Теперь вы можете выйти из системы, вызвав проводку в URL /api/logout

Ответ 2

Создайте маршрут для выхода из системы:

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

Создайте функцию выхода из системы в userController (или как указано в вашем маршруте)

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

Ответ 3

Убедитесь, что в User модели этот файл импортирован

use Laravel\Passport\HasApiTokens;

и вы используете черту HasApiTokens с помощью

use HasApiTokens

внутри пользовательского класса. Теперь вы создаете маршрут выхода и в контроллере делаете это

$user = Auth::user()->token();
$user->revoke();
return 'logged out'; // modify as per your need

Это позволит выйти из системы с текущего устройства, с которого он запросил выход. Если вы хотите выйти из всех устройств, где он вошел. Затем сделайте это вместо

DB::table('oauth_access_tokens')
        ->where('user_id', Auth::user()->id)
        ->update([
            'revoked' => true
        ]);

Это приведет пользователя к выходу из любого места. Это действительно помогает, когда пользователь меняет свой пароль с помощью параметра "Сбросить пароль" или "Забыли пароль", и вам нужно выйти из системы отовсюду.

Ответ 4

$request->user()->token()->revoke();

Ответ 5

Это пример кода, который я использую для выхода

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