我试图从我的快速应用程序访问req.session到angular (backoku和前端在heroku中单独部署)。我已经成立了 CORS用于处理从角度到我的快递应用程序的http请求。
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Credentials", true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json,X-XSRF-TOKEN,CSRF-Token,X-CSRF-Token');
next();
});
我在处理或获取请求会话时遇到问题,因为它总是空的。我在制作http get时能够将connect.sid连接到我的快速应用程序,但是当以角度形式发出另一个请求时它不会持续存在,所以每次刷新角度应用程序时,会话ID也会刷新。我需要cookie才能持久化,这样我就可以在发出post请求时使用它(即向http发出一个http get请求," Response将是csrf token"然后使用请求的csrf令牌发出另一个http post请求登录,但由于每个请求的每个会话ID都不同,因此csrf令牌无效。每个快速会话都通过connect-mongo npm模块存储在mongo lab中。
app.use(session({
secret : process.env.sessionKey,
httpOnly: true,
resave : true,
saveUninitialized: true,
store : new mongoStore({ mongooseConnection: mongoose.connection }),
cookie : { maxAge: 60 * 60 * 1000}
}));
Http在我的Angular App中发帖已经有效了,所以CORS设置正确。当我以角度访问路径URL(登录)时检查响应标题,这将使得Http get请求调用我注意到cookie(cookies.sid)已在标题上设置但我没有&# 39;我将如何存储它以便我可以在角应用程序中使用此cookie会话ID(例如登录后)
答案 0 :(得分:1)
如果您想阅读保存在浏览器中的cookie,您可以在任何需要的地方创建以下功能:
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return null;
}
要检查Cookie name
,请转到浏览器的开发者控制台中的Application
标签,在这种情况下,我猜connect.sid
。获取名称并致电
getCookie(<cookie-name>); you can use this value further.