Маршруты Laravel Passport / oauth работают, но не / api

Создание приложения с помощью Laravel, Passport и Vue. Этот вопрос не имеет прямого отношения к входу в систему с помощью oAuth2, а скорее к использованию api, защищенного Passport, с вашим собственным кодом javascript, как согласно документации.

При доступе к домашней странице и использовании axios для получения /oauth я получаю ошибку 401, как и ожидалось.

После входа в систему с использованием логина по умолчанию, предоставленного laravel (использует web auth), я могу вернуться на домашнюю страницу, и запрос axios для /oauth отлично работает; например, /oauth/clients, как и ожидалось, возвращает клиентов вошедшего в систему пользователя.

mounted() {

    //works as expected: 401 when logged out and response when logged in via /login
    axios.get('/oauth/clients')
          .then(response => {
              console.log(response.data)
          })

    //Always returns 400 error
    axios.get('/api/user')
          .then(response => {
              console.log(response.data)
          })

  }

Однако, когда я пытаюсь с помощью axios получить /api/user, я получаю ошибку 400 с сообщением Unauthenticated (независимо от того, была ли такая же ошибка до или после входа в систему).

//Returns a 400, always
Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Если я прав, тот факт, что /oauth маршруты работают, доказывает, что laravel_token, csrf и любые подобные вещи отправляются правильно. Поэтому я думаю, что это проблема на стороне сервера, особенно с auth: api guard. В файле конфигурации auth я настроил его на использование Passport и выполнил все документы.

Я не понимаю, почему я получаю ошибку 400, а не 401 при вызове api, и почему он вообще не аутентифицируется.

Особенно неприятно, так как согласно этому видео ( 11:30), это в значительной степени plug 'n' play.

Такое же поведение с почтальоном.

В: Есть ли решения этой ошибки?

Полный код на GitHub.


person Michał    schedule 11.04.2018    source источник
comment
Привет, Михал, как ты решил свой вопрос?   -  person Walter Cejas    schedule 12.12.2018


Ответы (1)


Добавьте этот код в свой app/Http/Kernel.php

'web' => [
    // Other middleware...
    \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],
person afsal c    schedule 11.04.2018
comment
Спасибо, просто дважды проверил, я уже добавил его - я думаю, что тот факт, что /oauth routes работают, показывает это, и laravel_token отправляется, как упоминалось в вопросе. - person Michał; 11.04.2018
comment
Нет. Этот код уже был добавлен до публикации вопроса - это не (я думаю) часть проблемы. - person Michał; 11.04.2018
comment
у вас есть это в вашем html ‹meta name = csrf-token content = {{csrf_token ()}}› - person afsal c; 11.04.2018
comment
window.axios.defaults.headers.common = {'X-Requested-With': 'XMLHttpRequest',}; добавьте это в свой обзор - person afsal c; 11.04.2018
comment
Да, есть оба. Опять же, если бы их не было, /oauth не работал бы. Я не думаю, что это проблема внешнего интерфейса. - person Michał; 11.04.2018