Маршрут паспорта 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', когда это необходимо.