簡體   English   中英

如何知道用戶是否使用passport.js跨子域登錄

[英]How to know if user is loggedin in with passport.js across subdomains

我已經分別在domain.comsub.domain.com中創建了兩個Mean.io應用程序,一切都按預期工作,但問題是子域( sub.domain.com )中的那個需要知道用戶是否登錄主應用程序( domain.com )。

我知道護照會處理會話並知道用戶是否已登錄,因為它在req中為express.js中的每個請求創建了一個用戶對象:

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)); 制作,信息傳遞到后端?

經過深入研究后,我找到了答案。

簡短回答:使用localStorage是不可能的(數據只能通過域訪問;甚至不能訪問子域),這是Mean.io現在用來存儲用戶信息的工具。

答案很長,每次,只要您登錄,就向后端發送請求,角度在實際發送之前攔截請求(這篇文章解釋了這個https://auth0.com/blog/2014/01/07/ angularjs-authentication-with-cookies-vs-token / )並添加如下的授權標頭:

headers: 

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

后來使用哪個護照將用戶信息序列化為會話並將其放入req.user。 Bearer令牌存儲在localStorage中,因此無法從域外獲取它。 我想出的唯一方法是使用帶有domain = '.domain.com' cookie,這樣每個子域都可以讀取這些cookie。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM