Обработка неавторизованных пользователей в Laravel - PullRequest
1 голос
/ 12 мая 2019

Я пытаюсь создать REST API, используя Laravel.Я использую JWT (Tymon \ JWTAuth) для аутентификации пользователей.

Вот часть моего файла api.php с маршрутами / api:

Route::middleware('auth:api')->get("match/{id}", "ApiMatchController@getMatch");
Route::middleware('auth:api')->put("match/{id}", "ApiMatchController@editMatch");

Теперь я отправляю GETзапрос /api/match/7.Авторизованный пользователь получает информацию о совпадении, как и ожидалось.Неавторизованный пользователь перенаправлен на корневой URL /, но я хочу, чтобы пользователь оставался на URL, я просто хочу вернуть HTTP-код 401 - Неавторизованный.Где я могу это изменить?Я могу сделать это внутри ApiMatchController@getMatch метода, но я бы хотел, чтобы связующее ПО auth:api сделало это для меня.Есть ли способ, как это сделать?

Затем я отправляю запрос PUT на /api/match/7 с некоторыми данными.Запрос от авторизованного пользователя работает нормально, но неавторизованный пользователь теперь получает HTTP-код 405 - Метод не разрешен (с отладочной информацией: Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: The PUT method is not supported for this route. Supported methods: GET, HEAD.).Зачем?Я очистил кэш маршрутов и, как вы можете видеть, в api.php есть определенный маршрут.Такое поведение действительно происходит только с неавторизованным пользователем.

1 Ответ

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

О первой части:

Авторизованный пользователь получает информацию о совпадении, как и ожидалось.Неавторизованный пользователь перенаправлен на корневой URL /, но я хочу, чтобы пользователь оставался на этом URL, я просто хочу вернуть HTTP-код 401 - Неавторизованный.Где я могу это изменить?

Это потому, что ваша защита по умолчанию - web, поэтому в случае, когда пользователь пытается получить доступ к защищенному маршруту, он будет перенаправлен на домашнюю страницу (по умолчанию это также можно настроить наконечно).

Чтобы изменить защиту по умолчанию на api, перейдите к config/auth.php и измените его следующим образом:

'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

Примечание. При выполнении запросов HTTP добавьте следующие заголовки:

/** The following tells Laravel that you want a response in json format. */
Accept: application/json
/** The following is for POST/PUT/PATCH requests, it tells the request payload format. */
Content-type: application/json

О второй части:

Запрос от авторизованного пользователя работает нормально, но неавторизованный пользователь теперь получает HTTP-код 405 - Метод не разрешен

PHP плохо обрабатывает методы PUT / PATCH / DELETE, чтобы обойти это неудобство, выполните запрос POST, а затем добавьте скрытое поле _method в полеформа.Значение, отправленное с полем _method, будет использоваться в качестве метода HTTP-запроса:

Тело запроса (метод с учетом регистра):

Endpoint:
    /api/match/7

Headers:
    Accept: application/json
    Content-type: application/json

Payload or Body:
    _method: PUT
    ...
...