【问题标题】:Internal Server Error[500] when using personal-access-token to access laravel api使用个人访问令牌访问 laravel api 时出现内部服务器错误 [500]
【发布时间】:2019-06-06 21:39:58
【问题描述】:

(这不是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未知列'api_token'在'where子句'(sql:select * from users 987654329 @ = 43c7654329 @ = 43c7654329 @ = 43c754329 @ = 43c7749ad6df2278e4e69d755909dfc2de3400cf6692b7d21dbc15d4196c121212bd limit 1)

这就是我的 auth.php 的样子:

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

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

【问题讨论】:

  • 向我们展示来自响应或来自laravel.log 的 Laravel 错误。这是服务器错误,前端代码不是特别有用
  • 我认为这与其他问题无关。我看到 SQL 错误,确定列 users 中没有列“api_token”,oauth_access_tokens 中有一行“api_token”。但我不知道他为什么要做这个愚蠢的查询。
  • 你使用的是什么版本的 Laravel?您是否也将config/auth.php 文件的内容放入您的问题中?
  • 刚刚更新问题,我用的是5.7版

标签: php laravel passport.js laravel-passport


【解决方案1】:

laravel 使用 api_token 如果你在你的 config.php 中写 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',
    ],
  ]

当您将其更改为护照后仍然出现相同的错误时,首先使用 artisan 清除您的应用程序。清除缓存、配置和视图..

【讨论】:

  • 我有相应的 auth.php 文件。我使用 php artisan view:clear php artisan config:cache php artisan cache:clear 清理了我的 laravel。似乎 500 消失了,但身份验证仍然不起作用(401)
猜你喜欢
  • 2017-10-16
  • 2020-07-25
  • 2019-09-06
  • 1970-01-01
  • 2017-03-26
  • 2020-11-21
  • 2019-12-30
  • 2019-06-10
  • 2017-10-04
相关资源
最近更新 更多