0

我正在尝试创建 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?

4

1 回答 1

0

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

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

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

您接下来要面对的问题是 SPA 没有中间件,因此您需要将您的应用程序设置为通用而不是 spa 才能在客户端使用中间件

于 2020-06-22T03:39:36.690 回答