使用MeanJS API从其他域登录

时间:2016-08-24 15:48:58

标签: angularjs authentication meanjs

MeanJS中,在用户登录并刷新页面后,core.server.controller.js会将用户凭据发送到index.html

exports.renderIndex = function (req, res) {
  res.render('modules/core/server/views/index', {
    user: req.user || null
  });
};

问题1:为什么服务器知道谁是登录用户?即使我们关闭了浏览器并重新打开它。

问题2

让我们调用上述应用的域名是localhost:8000。

我有一个单独的网站,只有前端代码(angular)没有后端。 我们称之为localhost:3000。我可以从localhost:8000调用API并显示数据。

我也可以通过调用localhost:8000 / api / auth / signin API登录,但是在我刷新它之后,它不认识我为signedin用户,因为我没有服务器像indexhost:3000那样为index.html提供服务。

使localhost:8000登录的任何技巧都有效吗?

1 个答案:

答案 0 :(得分:1)

关于问题1 ,这是因为express-session的配置方式而发生的。如果您关闭浏览器,cookie会话将保持不变,除非您更改config/env/default.js中定义的选项,即:

// Session Cookie settings
sessionCookie: {
    // session expiration is set by default to 24 hours
    maxAge: 24 * (60 * 60 * 1000),
    // httpOnly flag makes sure the cookie is only accessed
    // through the HTTP protocol and not JS/browser
    httpOnly: true,
    // secure cookie should be turned to true to provide additional
    // layer of security so that the cookie is set only when working
    // in HTTPS mode.
    secure: false
},

根据express-session this,您可以使用expiremaxAge来控制该行为。如果maxAgeexpire未设置,则大多数客户端会将此视为“非持久性Cookie”,并会在退出Web浏览器应用程序的情况下将其删除。在MEAN.js中设置了maxAge,即使浏览器已关闭,这也是用户保持登录的原因。但是,24小时后用户将需要再次登录。

关于问题2 ,我从未尝试过类似的内容,但我认为答案可能在domainpathsameSite express-session属性中1}} docs。看一看根据您的需求是否有效。