我看过this answer和this answer,但没有骰子。我的问题是当我的应用程序通过https://appname.herokuapp.com访问时,一切正常。但是当通过https://www.appname.com(CloudFlare别名为https://appname.herokuapp.com)访问时,它会崩溃。
具体来说,当用户登录时,将正确处理身份验证,但未正确设置用户会话cookie。因此,当登录用户转发到下一个屏幕时,请求将被拒绝为未经授权。
现在我在快递中这样做:
var mySession = session({
key: "sid",
secret: process.env.SESSIONS_SECRET,
proxy: true,
cookie: {
maxAge: 86400000,
secure: true,
},
store: rDBStore,
resave: false,
saveUninitialized: true,
unset: 'destroy'
});
app.enable('trust proxy');
app.use(mySession);
我在节点代码或CloudFlare设置中遗漏了什么?
是否可能与CloudFlare将节点应用程序安装在代理后面有关?
引自expressjs / session文档:
如果你的node.js在代理后面并使用secure:true,则需要在express中设置“trust proxy”。
app.set('trust proxy', 1)