Используется компонент Passport.
Метод логаут в контроллере ApiAuthController.php:
public function logout(Request $request): JsonResponse
{
$token = $request->user()->token();
$token->revoke();
$response = ['message' => __('You have been successfully logged out.')];
return response()->json($response, ResponseAlias::HTTP_NO_CONTENT, Common::HEADER, JSON_UNESCAPED_UNICODE);
}
Тест:
public function test_api_logout()
{
$fields = [
"name" => "Имя",
"surname" => "Фамилия",
"email" => "unit-test@mail.ru",
"password" => Hash::make("12345678"),
"remember_token" => Str::random(10),
"user_position_id" => 1,
"factory_id" => 1,
"user_role_id" => 1,
"workcenter_group_id" => 1
];
User::create($fields);
$response = $this->postJson('/api/login', ['email' => 'unit-test@mail.ru', 'password' => '12345678']);
$token = $response->json()['token'];
// логаут
$response = $this->withHeaders([
'Authorization' => 'Bearer ' . $token,
])->get('/api/logout');
if ($response->getStatusCode() === 204) {
// Вернулся ответ, что мы якобы вышли, пытаемся снова выйти
$response = $this->withHeaders([
'Authorization' => 'Bearer ' . $token,
])->get('/api/logout');
User::where('email', "unit-test@mail.ru")->forceDelete();
$response
->assertStatus(401);
} else {
User::where('email', "unit-test@mail.ru")->forceDelete();
}
}
Роут logout у меня закрыт миделваркой auth:api:
Route::middleware('auth:api')->group(function () {})
Когда я делаю повторный логаут, я рассчитываю получить код 401, не авторизован, но получаю код 204, типа успешно вышел, но я ведь уже вышел до этого, токен должен был отозваться.