Почему после вызова метода revoke() для токена в unit-тесте Laravel 10 авторизация сохраняется?

Как можно улучшить метод logout в контроллере ApiAuthController.php и соответствующий тест test_api_logout для проверки его функционала? 

Добавьте краткое описание вопроса, чтобы облегчить понимание его содержания.
  • 27 февраля 2024 г. 20:18
Ответы на вопрос 2
Похоже, что метод revoke() для токена в Laravel не обрывает текущую сессию авторизации. Для того чтобы улучшить метод logout в контроллере ApiAuthController.php, можно использовать метод revokeOtherTokens(), который отзывает все другие токены пользователя, кроме текущего. Таким образом, это обеспечит более надежное завершение сеанса для пользователя.

Также, для улучшения теста test_api_logout, рекомендуется проверить, что после вызова logout текущий токен пользователя больше не действует и доступ к защищенным ресурсам запрещен. Можно также добавить проверку статуса ответа на успешное завершение сеанса.

Таким образом, улучшенный метод logout и соответствующий тест test_api_logout будут более эффективно подтверждать работоспособность завершения сеанса пользователя в API.
Я вот так проверял <br/> <br/> <pre><code class="php">public function test_success_unauthorized(): void
    {
        $response = $this-&gt;postJson(route('auth.logout'));

        $response
            -&gt;assertOk()
            -&gt;assertJsonStructure([
                'status',
                'message',
            ])
            -&gt;assertExactJson([
                'status' =&gt; true,
                'message' =&gt; 'The access token was deleted',
            ]);

        $this-&gt;assertGuest('web');
    }</code></pre> <br/> <br/> Вроде было что-то такое у меня, но пока не могу вспомнить. Сегодня чуть позже проверю. <br/> <br/> Есть пара замечаний. <br/> <br/> 1) Зачем создаешь пользователя через напрямую? Есть же <code>User::factory()-&gt;create()</code> без ненужного ручного заполнения массива данных. <br/> <br/> 2) Зачем руками удаляешь пользователя? Есть же специальные трейты <a href="https://laravel.com/docs/10.x/database-testing#resetting-the-database-after-each-test" rel="nofollow">https://laravel.com/docs/10.x/database-testing#res...</a> <br/> <br/> 3) Для проверки аутентификации пользователя есть же специальные ассерты <a href="https://laravel.com/docs/10.x/http-tests#authentication-assertions" rel="nofollow">https://laravel.com/docs/10.x/http-tests#authentic...</a>
Похожие вопросы