我在https://api.example.com
上运行API服务,将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:4000
(Server)上运行localhost:3000
(Client)时,这可以很好地工作,但在生产环境中却不行。当我登录时,我在浏览器中获得了所有必要的cookie。所以我的API为客户端正确设置了cookie。由于某种原因,Next.js拒绝将其传递给中间件。
我在cookie中设置了HttpOnly; SameSite=None; Secure;
属性,我也尝试设置SameSite=Strict
,但不起作用。
如何将cookie传递到生产环境中的中间件?
1条答案
按热度按时间vd8tlhqk1#
所以我向ChatGPT提出了同样的问题,结果发现在后端设置cookie时需要显式定义domain属性。如果没有显式定义domain属性,它会将服务器源设置为专用于客户端的cookie。因此,cookie不会随请求一起发送,Next.Js无法解析它们。
向ChatGPT致敬!