Ответ Laravel Passport от одной и той же конечной точки одновременно с двумя разными access_tokens от двух пользователей в обоих случаях возвращает первого пользователя - PullRequest
1 голос
/ 31 мая 2019

Я использую Laravel 5.8 с Passport 7.2 для создания API для моего приложения.Я использую password_grant для аутентификации.

Я создал все, от регистрации до входа в систему, и, кажется, все работает правильно.Я могу получить access_token и refresh_token и получить доступ к маршрутам, к которым подключено промежуточное программное обеспечение auth: api.

В моих маршрутах у меня есть это:

Route::group(['middleware' => ['auth:api']], function () {
...
    Route::get('test', function (Request $request) {
        return $request->user(); 
    });
...
});

Когда я вызываю этот / api / testURL с заголовком. Авторизация: Bearer access_token. Я получаю аутентифицированного пользователя.Это просто отлично работает.

Я тестирую эти конечные точки с помощью Postman, но все то же самое, если я проверяю это, используя javascript из браузера.

Проблема в том, что у меня два разных access_token из двух разныхпользователи.Если я вызываю этот URL с одним access_token, я получаю правильные данные пользователя в качестве ответа, и если я жду несколько секунд и вызываю тот же URL со вторым access_token, я получаю правильные данные второго пользователя в качестве ответа.Но если я вызываю этот URL два раза одновременно с этими двумя access_tokens (сначала позвоните и, например, через полсекунды второго вызова), я получу данные пользователя первого вызова в качестве ответа в обоих запросах.

Я надеюсь, вы понимаетев чем проблема.

Может ли это быть проблемой кеширования или, возможно, проблемой сеанса (даже если API не имеет состояния)?

Если вам нужна дополнительная информация, просто скажите мне.

Во-первыхЯ думал, что это проблема с кешем браузера, но это то же самое в почтальоне.Я также пытался использовать Google Chrome для одного запроса и Mozilla для второго, и все то же самое.

Если у вас есть идеи о том, что может быть не так, я буду признателен: D

1 Ответ

0 голосов
/ 01 июня 2019

Я нашел решение.Это не проблема Laravel или Passport.

Проблема была в том, что на моем сервере настроены Nginx и https://engintron.com/, и у этого Engintron есть некоторый механизм микро-кэширования.

Этот микро-cache может быть полностью отключен или может быть отключен с помощью заголовков в запросе (Cache-Control: private).

Микро-кэш кэширует GET-запрос к URL-адресу в течение 1 секунды и игнорирует различные заголовки авторизации.Вот почему я получаю одни и те же пользовательские данные для двух разных заголовков авторизации, если я сделаю эти два запроса менее чем за 1 секунду.

Я надеюсь, что это поможет кому-то еще в будущем.Если кому-то нужна дополнительная информация, не стесняйтесь обращаться ко мне: D

...