使用个人访问令牌访问laravel API时发生内部服务器错误[500]

时间:2019-01-11 23:40:29

标签: php laravel passport.js laravel-passport

(这不是Laravel 5.3 Personal access token 500的副本。创建令牌有问题,但是创建令牌没有问题,我的令牌在身份验证中根本不被接受)

我在apache上使用laravel / passport进行设置。我遵循了https://laravel.com/docs/5.7/passport#installation中的安装例程,并且在那里我创建了一个混合应用程序。一部分使用标准的laravel,而使用vue + vuex的是一个复杂的组件。我的身份验证工作如下:我使用laravel标准Web身份验证,并在用户登录时创建一个新的个人访问令牌。

创建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'where子句'中的未知列'api_token'(SQL:从users中选择*,其中api_token = 43c7fbc2b96d67d36749ad6df2278e4e69d755909dfc2de3400cf6692eb7d21dbc12dpdd1963)

那是我的auth.php的样子:

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

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

1 个答案:

答案 0 :(得分:1)

如果您在config.php中写保护标记,laravel将使用api_token, 如果您在api防护中使用令牌,则需要在表中使用api_token字段。

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

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

因此,如果您要使用通行证,则可以将API中的驱动程序更改为通行证:

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

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

在将其更改为通行证后仍然出现相同错误时,请先通过工匠清除您的应用。清除缓存,配置和视图。.