如果后端和前端是分别在Heroku中部署的,则从express应用程序访问angular(typescript)的req.session

问题描述 投票:0回答:1

我正在尝试从我的express应用程序访问angular(后端和前端分别部署在heroku中)的req.session。 我已经设置了CORS来处理从angular到我的express应用程序的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链接到我的express应用程序,但是在angular中发出另一个请求时,它不会持久存在,因此每次刷新angular app时,会话ID也会同样刷新。 我需要cookie保持持久,以便在发出发布请求时可以使用它(例如,向有角度的发出http获取请求,“响应将是csrf令牌”,然后使用请求的csrf令牌进行登录以发出另一个http发布请求,但是由于每个每个请求的会话ID都会不同,csrf令牌将无效。每个快速会话都通过connect-mongo npm模块存储在mongo实验室中。

app.use(session({
    secret : process.env.sessionKey,    
    httpOnly: true,
    resave : true,
    saveUninitialized: true, 
    store  : new mongoStore({ mongooseConnection: mongoose.connection }),
    cookie : { maxAge: 60 * 60 * 1000}
}));

我的Angular App中的Http get post已经可以正常使用了,因此可以正确设置CORS。 当我以角度访问路由URL( login )时检查响应标头时,它将使Http get请求调用,我注意到在标头上设置了cookie(cookies.sid),但是我不怎么存储它我可以将此Cookie会话ID用于我在angular应用中的下一个请求(例如登录后)

响应标题

angular typescript express-session
1个回答
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 nameApplication标签在浏览器的开发者控制台,在这种情况下,我想connect.sid 。 获取姓名并致电

getCookie(<cookie-name>); you can use this value further.
© www.soinside.com 2019 - 2024. All rights reserved.