Как проверить выход из системы при использовании tymon / jwt-auth в Laravel? - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь выполнить выход из системы для моего API с пакетом tymon/jwt-auth.Здесь я определил маршруты API, контроллер и юнит-тест.

В api.php:

Route::group(['middleware' => 'api', 'prefix' => 'auth'], function ($router) {
    Route::post('login', 'AuthController@login');
    Route::post('logout', 'AuthController@logout');
    Route::post('refresh', 'AuthController@refresh');
    Route::post('me', 'AuthController@me');

    Route::post('me/profile', 'AuthController@profile');
});

В AuthController.php:

/**
 * Log the user out (Invalidate the token).
 *
 * @return \Illuminate\Http\JsonResponse
 */
public function logout()
{
    auth()->logout();

    return response()->json(['message' => 'Successfully logged out']);
}

Вtests/Unit/AuthenticationTest.php:

/**
 * Test if user can login trough internal api.
 *
 * @return void
 */
public function testLogin()
{
    $response = $this->post('api/auth/login', [
        'email' => 'admin@xscriptconnect.com',
        'password' => 'password'
    ]);

    $response->assertStatus(200)
        ->assertJsonStructure(['access_token', 'token_type', 'expires_in']);

    $this->assertAuthenticated('api');
}

/**
 * Test if user can logout trough internal api.
 *
 * @return void
 */
public function testLogout()
{
    $user = User::first();
    $user = $this->actingAs($user, 'api');

    $user->post('api/auth/logout')
        ->assertStatus(200)
        ->assertJsonStructure(['message']);

    $this->assertUnauthenticatedAs($user, 'api');
}

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

There was 1 failure:

1) Tests\Unit\AuthenticationTest::testLogout
Expected status code 200 but received 500.
Failed asserting that false is true.

И когда я проверил это, используя этот метод:

public function testLogout()
{
    $user = User::first();
    $this->actingAs($user, 'api');

    $response = auth()->logout();
    $response->assertStatus(200);
    $response->assertJsonStructure(['message']);
}

Я получил эту ошибку:

There was 1 error:

1) Tests\Unit\AuthenticationTest::testLogout
Tymon\JWTAuth\Exceptions\JWTException: Token could not be parsed from the request

Что такоеправильный способ проверить выход через этот пакет?Пожалуйста, помогите.

1 Ответ

0 голосов
/ 10 мая 2019

Согласно этому комментарию на его странице github, я нашел решение этой проблемы.Я изменил свой скрипт таким образом, и он работает.

/**
 * Test if user can logout trough internal api.
 *
 * @return void
 */
public function testLogout()
{
    $user = User::first();
    $token = \JWTAuth::fromUser($user);

    $this->post('api/auth/logout?token=' . $token)
        ->assertStatus(200)
        ->assertJsonStructure(['message']);

    $this->assertGuest('api');
}

Пожалуйста, не стесняйтесь отправлять другой ответ по этому вопросу, если таковые имеются.Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...