【发布时间】:2021-07-02 16:08:20
【问题描述】:
我正在使用快速会话。我设置了域 domain: 'mydomain.com',以便可以在子域之间设置会话 cookie,例如 api.mydomain.com 和 staging.mydomain.com。
但这会阻止Set-Cookie 标头在使用 localhost 前端进行测试时设置 cookie。我得到Set-Cookie was blocked because its Domain attribute was invalid with regards to the current host url.
所以如果源是本地主机,我需要将域属性更改为本地主机。
如果我有条件地设置域,我们无权访问req:
app.use(session({
secret: 'very secret 12345',
resave: true,
saveUninitialized: false,
store: new MongoStore({ mongooseConnection: mongoose.connection }),
cookie: {
domain:
req.get('origin').slice(0, 17) === 'http://localhost:' ? 'localhost' : 'mydomain.com',
secure: true,
httpOnly: true,
sameSite: none,
},
})
);
这将返回ReferenceError: req is not defined。
所以我尝试在自定义中间件中调用session 以访问req:
app.use((req, res, next) =>
session({
secret: 'very secret 12345',
resave: true,
saveUninitialized: false,
store: new MongoStore({ mongooseConnection: mongoose.connection }),
cookie: {
domain:
req.get('origin').slice(0, 17) === 'http://localhost:' ? 'localhost' : 'mydomain.com',
secure: true,
httpOnly: true,
sameSite: none,
},
})
);
但它不起作用。似乎有了这个,res、req 和 next 不会被传递给 session() 返回的中间件函数。我也尝试调用返回 -session({..options..})() 的函数 session() ,但这也不起作用。
如何根据请求来源设置域属性?
【问题讨论】:
标签: node.js express cors express-session