如何知道用户是否使用passport.js跨子域login

我已经在domain.comsub.domain.com分别创build了两个Mean.io应用程序,一切都按预期在两个工作,但问题是,子域( sub.domain.com )中的一个需要知道用户被logging在主应用程序( domain.com )中。

我知道护照处理会话,并知道用户是否login,因为它在express.js中的每个请求的req中创build一个用户对象:

if (req.user) { // logged in } else { // not logged in } 

这里的不便之处在于,这种方法是在域内而不是在外域进行的。 换句话说,如果我以这样的方式请求后端:

 $http.get('/api/users/me').success(this.onIdentity.bind(this)); 

domain.com ,这将填充用户数据,但是,如果我直接从浏览器做出相同的请求,例如,它返回null。

我需要了解如何跨域传递这些信息? 如果每次请求$http.get('/api/users/me').success(this.onIdentity.bind(this)); 信息被传递到后端?

经过深入研究,我find了答案。

简单的回答:使用localStorage是不可能的(数据只能被域访问;甚至不能用于子域),这是Mean.io现在用来存储用户信息的工具。

长时间的回答,每次只要你login,你发送一个请求到后端,在实际发送之前angular度拦截请求(这篇文章解释了这个https://auth0.com/blog/2014/01/07/ angularjs-authentication-with-cookies-vs-token / ),并添加一个授权标题,如下所示:

 headers: { ... authorization: 'Bearer eyJhbGciOiJIUzI1NiJ9.JTdCJTIyX2lkJTIyOiUyMjU1ZDFjYmIxNDA..._rUsUBFxCQy3qqUGi9QGVD0YXCEk0', ... } 

这些护照后来用来将用户信息序列化到会话中,并将其放入req.user。 不记名令牌存储在localStorage中,因此无法从域外获取。 我想出的唯一方法是使用domain = '.domain.com' cookie,以便每个子域都可以读取这些cookie。