2017-02-08 4 views
5

Я использую Laravel 5.3 & Паспорт.Laravel Passport Route перенаправляет на страницу входа

При использовании Postman для проверки любого маршрута, установленного в файле api.php, он всегда возвращает страницу входа. Вот пример моего тестирования маршрута:

Route::get('/getKey', function() { 
    return 'hello'; 
})->middleware('client_credentials'); 

Почтальон Титулы:

Accept application/json 
Authorization Bearer <then my key> 

Я установил ПО промежуточного слоя для «идентификации: апи» на другое решение, которое я нашел в поисках ответа.

protected function mapApiRoutes() 
    { 
     Route::prefix('api') 
      ->middleware('auth:api') 
      ->namespace($this->namespace) 
      ->group(base_path('routes/api.php')); 
    } 

Я пробовал практически все решения, которые работали для других, но все еще не повезло. Любые предложения будут высоко ценится.

ОБНОВЛЕНИЕ Итак, я наконец-то получил на работу. Я создал приложение для потребителей и создал несколько тестовых функций. Я смог использовать api с проверкой токена. Однако, попадание этого маршрута больше не возвращает мою страницу входа, но вместо этого теперь ничего не возвращает. Так что он по-прежнему не работает по какой-то причине.

Route::get('/user', function (Request $request) { 

    return $request->user(); 
})->middleware('client_credentials'); 

ответ

8

Перенаправление на указанный логин входа происходит в классе 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 Несанкционированное réponse с JSON сообщения), и если не будет перенаправление на страницу входа в систему в соответствии с замечаниями он

Преобразует исключение аутентификации в неаутентифицированному ответ

Чтобы решить эту проблему в почтальона, по запросу перейдите на вкладку Заголовки и добавьте:

key: Accept 
value: application/json 

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

В любом случае это позволит решить проблему с перенаправлены на страницу входа в систему, однако это знак вашей основной аутентификации не работает

1

Он закодирован, чтобы проверить, поступает ли запрос от Ajax. В этом случае вы получите следующий JSON в случае неудачной аутентификации:

{ 
"error": "Unauthenticated." 
} 

В противном случае это будет предполагаться, что вы используете браузер, и он будет перенаправлять на Html страницу входа в систему для проверки подлинности.

Вы можете добавить следующий заголовок к вашему запросу, чтобы имитировать запрос Ajax:

X-Requested-With = XMLHttpRequest 
0

Вам нужно добавить «Authorization: Bearer YOUR_TOKEN» в заголовок каждого вашего запроса. Кроме того, для последней версии Laravel 5.5 или выше. Вам также нужно добавить «Accept: application/json» для запроса заголовка.

Смежные вопросы