[英]Passport.js: How does LocalStrategy accesses the user information?
[英]How to know if user is loggedin in with passport.js across subdomains
我已經分別在domain.com和sub.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.