Внутренняя ошибка сервера [500] при использовании токена персонального доступа для доступа к API laravel - PullRequest
0 голосов
/ 12 января 2019

(Это не дубликат Laravel 5.3 Персональный токен доступа 500 . Существует проблема с созданием токена, но у меня нет проблем с созданием токена, мой токен просто не принят в аутентификации)

У меня есть настройки, использующие laravel / passport на apache. Я следовал процедуре установки в https://laravel.com/docs/5.7/passport#installation, а также там я создал смешанное приложение. Часть использует стандартный laravel, а есть сложный компонент, использующий vue + vuex. Моя аутентификация работает следующим образом: я использую стандартную веб-аутентификацию laravel, и при входе в систему я создаю новый токен личного доступа.

Когда компонент vue создан, он успешно извлекает токен, используя:

window.axios.get(`/oauth/personal-access-tokens`)

Когда я запрашиваю API, я передаю токен:

axios.defaults.headers.common['Authorization'] = 'Bearer '+context.rootState.user.token;
axios.defaults.headers.common['Accept'] = 'application/json';
window.axios.get(`/api/userfavs`)...

Полный заголовок

Accept  application/json
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Authorization   Bearer 43c7fbc2b96d67d36749ad6…cf6692eb7d21dbc15d4196c1212bd
Cache-Control   max-age=0
Connection  keep-alive
Cookie  XSRF-TOKEN=eyJpdiI6IkNrNSswZER…jOTA5MTA3ZjMxOTk4NWEifQ%3D%3D
Host    localhost
Referer http://localhost/vegbed/1/edit
User-Agent  Mozilla/5.0 (X11; Ubuntu; Linu…) Gecko/20100101 Firefox/64.0
X-CSRF-TOKEN    tbVdEArmqXzdEGGwwd2eYFnL0gwKs4dW01aSrKz1
X-Requested-With    XMLHttpRequest
X-XSRF-TOKEN    eyJpdiI6IkNr

Маршрут:

Route::get('userfavs/','Api\UserFavController@index')->middleware('auth:api');

Ответ:

SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'api_token' в 'предложении где' (SQL: выберите * из users, где api_token = 43c7fbc2b96d67d36749ad6df2278e4e69d755909dfc2de3400cf6692eb122641961212264196b1d196

Вот так выглядит мой auth.php:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

1 Ответ

0 голосов
/ 12 января 2019

laravel использует api_token, если вы пишете токен в guard в вашем config.php ,, вам нужно поле api_token в вашей таблице, если вы используете токен в ваших api guards.

'guards' => [
    'web' => [
        'driver'   => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver'   => 'token',
        'provider' => 'users',
    ],
  ]

поэтому, если вы хотите использовать паспорт, измените драйвер в API на паспорт следующим образом:

'guards' => [
    'web' => [
        'driver'   => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver'   => 'passport',
        'provider' => 'users',
    ],
  ]

если после перехода на паспорт по-прежнему возникает та же ошибка, сначала очистите приложение с помощью artisan. очистить кеш, конфиг и просмотр ..

...