如果在Heroku中单独部署后端和前端,则从快速应用程序访问req.session到angular(typescript)

时间:2018-04-05 01:52:19

标签: angular typescript express-session

  

我试图从我的快速应用程序访问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(例如登录后)

Response Header

1 个答案:

答案 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.