Heroku自定义域名下应用用户存储异常,认证请求返回401
切换到自定义域名后,认证失败的核心原因是会话Cookie的域名、安全属性配置不匹配,导致自定义域名下的请求无法携带认证Cookie,进而被isAuthenticated()中间件判定为未登录。
具体排查与修复步骤:
调整Cookie的Domain属性
如果你用了express-session或类似会话中间件,之前的Cookie Domain可能被设置为Heroku默认域名(.herokuapp.com),这会导致自定义域名(www.justlaunched.xyz)无法读取该Cookie。需要将Domain改为自定义域名的根域(.justlaunched.xyz)或具体域名(www.justlaunched.xyz),也可以在生产环境根据请求的主机名动态设置。强制开启Cookie的Secure属性
自定义域名使用HTTPS,必须将Cookie的secure属性设为true,确保只有HTTPS请求才会携带Cookie。如果之前在Heroku默认域名下依赖平台自动处理,切换后需要手动配置。优化SameSite属性设置
若Cookie的SameSite设为Strict,可能在Metamask登录回调这类跨域场景下无法正确写入Cookie。建议改为Lax(适配大多数场景),如果需要完全跨域支持,可设为None(必须搭配secure: true)。验证会话中间件配置
以express-session为例,正确的生产环境配置示例:app.use(session({ secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false, cookie: { domain: '.justlaunched.xyz', secure: true, sameSite: 'Lax', maxAge: 24 * 60 * 60 * 1000 // 1天有效期 } }));
额外检查点:
- 确认自定义域名已在Heroku后台正确配置SSL证书,确保HTTPS连接正常。
- 打开浏览器开发者工具(Application > Cookies),检查自定义域名下是否存在认证Cookie,若不存在则说明Cookie写入失败。
内容的提问来源于stack exchange,提问作者asier
相关产品推荐
相关产品推荐

