NextJS回调中在Vercel上无法正常获取Cookies的问题求助
检查SameSite与Secure配置匹配
生产环境设置sameSite: "none"时,必须同时开启secure: true——这是浏览器的强制要求,只有HTTPS请求才会携带这类Cookie。Vercel默认提供HTTPS,但如果使用自定义域名未配置SSL,会导致Cookie无法被发送。补充Cookie的域名配置
本地localhost环境下无需指定domain,但部署到Vercel后,默认域名是xxx.vercel.app或自定义域名,若Cookie未绑定对应域名,回调请求时浏览器不会携带它。可以添加domain参数:context.cookies().set("session", state, { httpOnly: true, secure: env.NODE_ENV === "production", path: "/", maxAge: 10 * 24 * 60 * 60, sameSite: env.NODE_ENV === "production" ? "none" : "lax", domain: env.NODE_ENV === "production" ? ".vercel.app" : undefined, // 自定义域名可改为".yourdomain.com" });注意:使用带
.前缀的域名可以适配子域名,避免域名不匹配问题。验证回调请求的Cookie携带状态
打开浏览器开发者工具的「网络」面板,查看回调请求的Request Headers,确认Cookie字段是否包含session。如果没有,说明是浏览器未发送(配置问题);如果有但后端获取不到,再检查Next.js的context使用逻辑。确认函数运行时配置
确保回调函数的runtime确实设置为nodejs,Edge Runtime的Cookie处理逻辑与Node.js Runtime不同,可能导致无法获取自定义Cookie。
内容的提问来源于stack exchange,提问作者Rutger Versteegden
相关产品推荐
相关产品推荐

