Next.js 中间件不接收来自子域 API 的 cookie

问题描述 投票:0回答:1

我的 API 服务在

https://api.example.com
上运行,Next.js 应用程序部署到 Vercel 并绑定到
https://example.com

还有一个检查受保护路径的中间件。

export function middleware(request: NextRequest) {
  const isAuthenticated =
    !!request.cookies.get('Authentication') || !!request.cookies.get('Refresh');
  ...
  ...
  return NextResponse.next();
}

这在针对

localhost:3000
(服务器)运行
localhost:4000
(客户端)时非常有效,但不适用于生产环境。 当我登录时,我在浏览器中获得了所有必要的 cookie。所以我的 API 为客户端正确设置了 cookie。 Next.js 出于某种原因拒绝将其传递给中间件。

我在 cookie 中设置了

HttpOnly; SameSite=None; Secure;
属性 我也试过设置
SameSite=Strict
,但没有用。

关于如何将 cookie 传递给生产环境中的中间件有什么想法吗?

cookies next.js subdomain middleware next
1个回答
0
投票

于是我问了ChatGPT同样的问题,结果发现在Backend设置cookies的时候需要显式定义domain属性。如果您没有明确定义域属性,它会将服务器来源设置为专用于客户端的 cookie。因此 cookie 不会随请求一起发送,Next.Js 无法解析它们。

向 ChatGPT 致敬!

© www.soinside.com 2019 - 2024. All rights reserved.