【问题标题】:Laravel Passport /oauth routes work but not /apiLaravel Passport /oauth 路由有效,但 /api 无效
【发布时间】:2018-09-21 16:09:57
【问题描述】:

使用 Laravel、Passport 和 Vue 构建应用程序。此问题与使用 oAuth2 登录没有直接关系,而是使用您自己的 javascript 代码使用受 Passport 保护的 api,如 per the docs

在访问主页并使用 axios 获取/oauth 时,如预期的那样收到错误 401。

使用laravel提供的默认登录(使用webauth)登录后,可以回到首页,/oauth的axios请求效果很好;例如/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 错误,并显示消息未验证(无论登录之前还是之后,同样的错误)。

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

如果我是正确的,/oauth 路由工作的事实证明 laravel_token、csrf 和任何类似的东西都被正确发送。因此,我认为这是服务器端问题,尤其是 auth:api 保护。在 auth 配置文件中,我将其设置为使用 Passport,并遵循所有文档。

我很困惑为什么我在调用 api 时收到 400 错误而不是 401,以及为什么它一开始就没有进行身份验证。

自从according to this video(11:30 标记)以来尤其令人沮丧,它几乎就是即插即用。

与 Postman 的行为相同。

问:这个错误有什么解决办法吗?

完整代码on GitHub.

【问题讨论】:

  • 嗨,Michal,你是怎么解决你的问题的?

标签: php laravel vue.js oauth-2.0 laravel-passport


【解决方案1】:

将此代码添加到您的app/Http/Kernel.php

'web' => [
    // Other middleware...
    \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],

【讨论】:

  • 谢谢,刚刚仔细检查,我已经添加了它 - 我认为/oauth 路由工作的事实表明,并且 laravel_token 正在按照问题中提到的那样发送。
  • 没有。该代码在发布问题之前已经添加 - 这不是(我认为)问题的一部分。
  • 你的 html 中有没有这个
  • window.axios.defaults.headers.common = { 'X-Requested-With': 'XMLHttpRequest', };将此添加到您的视图中
  • 是的 - 两者都在那里。同样,如果不是,/oauth 将不起作用。我认为这不是前端问题。
猜你喜欢
  • 2021-06-03
  • 2019-07-27
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 2015-08-12
  • 2019-05-08
  • 2016-07-11
  • 1970-01-01
相关资源
最近更新 更多