【问题标题】:Laravel returns unauthorized with second requestLaravel 未经授权返回第二个请求
【发布时间】:2020-10-10 21:46:21
【问题描述】:

我正在尝试创建 SPA。我将 Laravel API 用于后端,将 Nuxt.js 用于前端。我想通过 Laravel Sanctum 对用户进行身份验证。我在 localhost:8000 上运行后端,在 localhost:3000 上运行前端。 SANCTUM_STATEFUL_DOMAINS 设置为 localhost:3000,SESSION_DOMAIN 设置为 localhost,SESSION_DRIVER 设置为 cookie。

我在我的应用中创建了登录和注销,一切正常,直到我在登录后提出第一个请求。我只是希望我的应用返回所有用户:

Route::middleware('auth:sanctum')->get('/users', function() { return User::all(); });

但它返回 401 未经身份验证。我不知道为什么会这样。用于返回登录用户的路由使用相同的中间件:

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

并且完美运行(Nuxt 会在每次页面更改时返回登录用户)。我用 axios 调用了用户路由:

axios.get('http://localhost:8000/api/users')

什么会导致这个问题?这非常令人沮丧,因为我为了让登录和注销工作而付出了很多努力。

我还考虑过在 api.domain.test 上运行 API,在 domain.test 上运行前端,但是否可以在本地将这样的域连接到 Nuxt?

【问题讨论】:

    标签: laravel vue.js axios nuxt.js laravel-sanctum


    【解决方案1】:

    它返回未授权,因为对端点的调用没有用户的访问令牌。

    这个想法是,当您登录 auth:sanctum 时,会将访问令牌返回给客户端,以便客户端可以使用它来访问所有下一次调用中的数据。

    为此,您需要在 nuxt 中使用身份验证模块检查 this

    接下来你要面临的问题是 SPA 没有中间件,所以你需要将你的应用设置为通用而不是 spa 才能在客户端使用中间件

    【讨论】:

    • 原来我必须通过 withCredentials 作为 axios 中的配置来获取自己,就像这样 axios.get('localhost:8000/api/users', { withCredentials: true });
    猜你喜欢
    • 2021-04-26
    • 2017-10-16
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多