使用 personal-access-token 访问 laravel api 时出现内部服务器错误 [500]
Internal Server Error[500] when using personal-access-token to access laravel api
(这不是 的副本。创建令牌有问题,但我创建令牌没有问题,我的令牌在身份验证中根本不被接受)
我在 apache 上使用 laravel/passport 进行了设置。我已经按照 https://laravel.com/docs/5.7/passport#installation 中的安装程序进行操作,并且在那里我创建了一个混合应用程序。一部分在使用标准laravel,还有一个复杂的组件在使用vue+vuex。我的身份验证工作如下:我使用 laravel 标准 Web 身份验证,在用户登录时我创建了一个新的 personal-access-token.
创建 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`)...
完整header
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]: Column not found: 1054 Unknown column 'api_token' in 'where clause' (SQL: select * from users
where api_token
= 43c7fbc2b96d67d36749ad6df2278e4e69d755909dfc2de3400cf6692eb7d21dbc15d4196c1212bd limit 1)
这就是我的 auth.php 的样子:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
laravel 如果你在你的 config.php 中写了 token in guard 就使用 api_token,
如果您在 api 守卫中使用令牌,则需要在 table 中添加 api_token 字段。
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
]
所以如果你想使用 passport,那么将 API 中的驱动程序更改为 passport,如下所示:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
]
当你把它改成 passport 后仍然出现同样的错误,先用 artisan 清除你的应用程序。清除缓存、配置和视图..
(这不是
我在 apache 上使用 laravel/passport 进行了设置。我已经按照 https://laravel.com/docs/5.7/passport#installation 中的安装程序进行操作,并且在那里我创建了一个混合应用程序。一部分在使用标准laravel,还有一个复杂的组件在使用vue+vuex。我的身份验证工作如下:我使用 laravel 标准 Web 身份验证,在用户登录时我创建了一个新的 personal-access-token.
创建 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`)...
完整header
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]: Column not found: 1054 Unknown column 'api_token' in 'where clause' (SQL: select * from
users
whereapi_token
= 43c7fbc2b96d67d36749ad6df2278e4e69d755909dfc2de3400cf6692eb7d21dbc15d4196c1212bd limit 1)
这就是我的 auth.php 的样子:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
laravel 如果你在你的 config.php 中写了 token in guard 就使用 api_token, 如果您在 api 守卫中使用令牌,则需要在 table 中添加 api_token 字段。
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
]
所以如果你想使用 passport,那么将 API 中的驱动程序更改为 passport,如下所示:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
]
当你把它改成 passport 后仍然出现同样的错误,先用 artisan 清除你的应用程序。清除缓存、配置和视图..