Laravel Sanctum + Nuxt JS 我无法通过 CORS

Posted

技术标签:

【中文标题】Laravel Sanctum + Nuxt JS 我无法通过 CORS【英文标题】:Laravel Sanctum + Nuxt JS I cannot pass CORS 【发布时间】:2020-12-31 02:02:51 【问题描述】:

在开始之前,我想说我搜索并尝试了很多方法,但似乎没有一个可以正常工作。我还创建了一个全新的 Laravel 安装,但仍然没有成功。

问题是 CORS,我总是被 CORS 阻止。

设置使用Laravel Valet。 Laravel 应用程序运行在https://sanctum.test NuxtJs 应用程序在https://nuxt.sanctum.test 运行

这是一个全新的安装。

我的.env 文件具有所需的设置:

SESSION_DOMAIN=.sanctum.test  
SANCTUM_STATEFUL_DOMAINS=sanctum.test,nuxt.sanctum.test

我的cors.php 具有所需的设置:

...
    'supports_credentials' => true,
...

我的Http/Kernel.php

...
        'api' => [
            EnsureFrontendRequestsAreStateful::class,
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

我的 NuxtJs 应用在 http://localhost:3000 上运行,我有一个 Laravel Valet 反向代理,因此我可以从 https://nuxt.sanctum.test 访问它,我可以确认它按预期工作。

这是我的nuxt.config.js

export default 
  s-s-r: false,

  target: 'server',

  head: 
    title: process.env.npm_package_name || '',
    meta: [
       charset: 'utf-8' ,
       name: 'viewport', content: 'width=device-width, initial-scale=1' ,
      
        hid: 'description',
        name: 'description',
        content: process.env.npm_package_description || '',
      ,
    ],
    link: [ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' ],
  ,

  css: [],

  plugins: [],

  components: true,

  buildModules: ['@nuxtjs/eslint-module', '@nuxtjs/tailwindcss'],

  modules: [
    '@nuxtjs/axios',
    '@nuxtjs/auth-next',
    '@nuxtjs/pwa',
    '@nuxtjs/dotenv',
  ],

  auth: 
    strategies: 
      laravelSanctum: 
        provider: 'laravel/sanctum',
        url: 'https://sanctum.test',
      ,
      cookie: 
        cookie: 
          name: 'XSRF-TOKEN',
        ,
      ,
    ,
  ,

  router: 
    middleware: ['auth'],
  ,

  axios: 
    proxy: true,
    credentials: true,
  ,
  proxy: 
    '/laravel': 
      target: 'https://sanctum.test',
      pathRewrite:  '^/laravel': '/' ,
    ,
  ,

  build: ,

现在,无论我做什么,我总是从 Laravel 应用程序中得到同样的错误:

Access to XMLHttpRequest at 'https://sanctum.test/sanctum/csrf-cookie' from origin 'https://nuxt.sanctum.test.test' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

正如您在上面看到的,请求是从子域向主域发出的。如上所示,SANCTUM_STATEFUL_DOMAINS 是正确的。

【问题讨论】:

可能与这个问题有关:github.com/fruitcake/laravel-cors/issues/421 我发现了问题,请查看下面的答案。 【参考方案1】:

睡了一晚才发现问题!

我缺少其他端点的 config/cors.php 配置:

<?php

return [
    'paths' => ['api/*', 'sanctum/*', 'login', 'logout'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => true,
];

【讨论】:

以上是关于Laravel Sanctum + Nuxt JS 我无法通过 CORS的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Sanctum:被带有 Nuxt Auth 模块的 CORS 策略阻止

带有 laravel sanctum 的 Nuxt 收到“未验证”消息

使用 nuxtjs 登录 laravel sanctum 后出现 401(未验证)错误

如何解决 Laravel + Nuxt.js 中的 CORS 错误

如何使用 laravel 后端 API 在 nuxt.js 中上传图片

为啥我的 CSRF 令牌与 Laravel 和 Sanctum 不匹配?