我的 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 传递给生产环境中的中间件有什么想法吗?
于是我问了ChatGPT同样的问题,结果发现在Backend设置cookies的时候需要显式定义domain属性。如果您没有明确定义域属性,它会将服务器来源设置为专用于客户端的 cookie。因此 cookie 不会随请求一起发送,Next.Js 无法解析它们。
向 ChatGPT 致敬!