Маршрут паспорта Laravel перенаправляется на страницу входа в систему
Я использую Laravel 5.3 и Passport.
При использовании Postman для проверки любого маршрута, установленного в файле api.php, он всегда возвращает страницу входа. Вот пример моего маршрута тестирования:
Route::get('/getKey', function() {
return 'hello';
})->middleware('client_credentials');
Параметры почтальона:
Accept application/json
Authorization Bearer <then my key>
Я установил промежуточное ПО для "auth: api" для другого решения, которое я нашел во время поиска ответа.
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('auth:api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
Я пробовал практически все решения, которые работали для других, но до сих пор не повезло. Любые предложения будут высоко оценены.
UPDATE
Поэтому я, наконец, получил что-то для работы. Я создал приложение для потребителей и создал несколько тестовых функций. Я смог использовать api с проверкой токена. Однако, попадание этого маршрута больше не возвращает мою страницу входа, но вместо этого теперь ничего не возвращает. Поэтому он по-прежнему не работает по какой-либо причине.
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('client_credentials');
Ответы
Ответ 1
Перенаправление в определенный логин входа происходит в классе app\Exceptions\Handler.php.
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest(route('login'));
}
Функция пытается определить, вызвана ли она из API (в этом случае она возвращает 401 несанкционированный ответ с сообщением JSON), и если не будет перенаправлена на страницу входа в систему в соответствии с комментариями, она
Преобразует исключение аутентификации в ответ без проверки подлинности
Чтобы решить проблему в почтальоне, нажмите на вкладке "Заголовки" и добавьте:
key: Accept
value: application/json
Я новичок в этом, поэтому не уверен, что это заголовок, который мы должны добавлять при тестировании всех вызовов API с помощью Postman или просто для того, чтобы настроить этот метод laravel.
В любом случае это решит вашу проблему с перенаправлением на страницу входа в систему, однако это знак, что ваша базовая аутентификация не работает.
Ответ 2
Вам нужно добавить Authorization: Bearer YOUR_TOKEN
в каждый заголовок вашего запроса. Также для последней версии Laravel 5.5 или выше. Вам также необходимо добавить Accept: application/json
для запроса заголовка.
Ответ 3
Добавьте этот код в заголовки почтальона.
key Value
Accept application/json
Ответ 4
Кодируется, чтобы проверить, поступает ли запрос от Ajax. В этом случае вы получите следующий json, если аутентификация завершается с ошибкой:
{
"error": "Unauthenticated."
}
В противном случае предполагается, что вы используете браузер, и он перенаправляется на страницу входа в Html для аутентификации.
Вы можете добавить в свой запрос следующий заголовок для имитации запроса Ajax:
X-Requested-With = XMLHttpRequest
Ответ 5
если вы используете username
вместо username
email
для учетных данных; вставьте этот метод в вашу модель User
:
function findForPassport($username) {
return $this->where('username', $username)->first();
}
Ответ 6
Вот где проблема, из этих строк кодов
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('auth:api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
глазной знак
->middleware('auth:api')
Промежуточное ПО 'auth: api' имеет ключевое слово AUTH === аутентифицированный пользователь, поэтому все запросы под этим промежуточным программным обеспечением, даже те, которые не требуют аутентифицированного пользователя, потребуют один
Поэтому, когда почтальон отправляет запрос на маршруты в auth: api, он будет перенаправлен на страницу входа для аутентификации в первую очередь (сначала для входа)
Поэтому я хотел бы предложить использовать промежуточное программное обеспечение auth: api для маршрутов, для которых требуется аутентифицированный пользователь в соответствии с вашими проектами и безопасностью вашего приложения
Если у вас есть файл "auth: api" в вашем файле Http/kernel.php, например
'api' => [
'throttle:60,1',
'bindings',
'auth:api"
],
И вы разработали SPA, и все маршруты находятся на маршрутах /api.php, даже для входа на страницу входа в систему/регистрации потребуется аутентифицированный пользователь, что является странным.
Поэтому добавьте промежуточное ПО 'auth: api', когда это необходимо.