首页  >  问答  >  正文

Laravel Sanctum & NuxtJS SPA无法在浏览器中创建csrf cookie

我在 Laravel 中有一个带有 Sanctum 的后端 API,在 NuxtJS 中有单独的存储库 SPA

我正在尝试通过 Sanctum 验证我的 SPA。我正在尝试按照 Sanctum 文档在浏览器中获取 CSRF cookie。

问题是当我调用 Sanctum 提供的 CSRF 令牌端点时,我得到了正确的响应,但没有设置 cookie。就这样,没有错误。我是否要使用 nuxt auth 或者只是普通的旧 axios 调用并不重要。

这就是我所拥有的:

域名:API -publisher.local:8080;前端-publisher.local:3000

NUXT 身份验证配置

auth: {
    strategies: {
      laravelSanctum: {
        provider: 'laravel/sanctum',
        url: 'http://publisher.local:8080',
        endpoints: {
          login: { url: '/api/v1/login', method: 'post' },
          // logout: { url: '/auth/logout', method: 'post' },
          // user: { url: '/auth/user', method: 'get' }
        }
      },
    },
  },

AXIOS 配置

axios: {
    baseURL: 'http://publisher.local:8080/api/v1', // Used as fallback if no runtime config is provided
    credentials: true,
    proxy: true,
  },

神圣.php

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1,local:3000',
        Sanctum::currentApplicationUrlWithPort()
    ))),

会话.php

'domain' => env('SESSION_DOMAIN', '.local'),

我尝试了这些设置的不同组合和变体,但都不起作用。你们知道可能出了什么问题吗?

P粉512363233P粉512363233334 天前546

全部回复(1)我来回复

  • P粉311563823

    P粉3115638232023-12-14 00:56:05

    我想我已经明白了这一点。我让它工作了。

    因此 .local 不能是顶级域,我认为这可能是问题的一部分,但我不确定。

    将域名更改为旧的 localhost 可以解决问题,但此解决方案有一个问题。由于某些我不知道的原因,无论我调用哪个端点,我都会在对 API 的任何调用中自动获取 XSRF cookie。奇怪。

    最有效的方法是将域名更改为 api.publisher.compublisher.com,然后更改 Sanctum 文档中的所有设置。

    对域名要格外小心,确保它们匹配并且设置正确。重新配置那个东西非常容易,但很难诊断它!

    希望有帮助!

    回复
    0
  • 取消回复