2014-10-04 52 views
2

對於JavaScript來說相對陌生,我試圖在Node.js + Express/Angular.js應用中實現亞馬遜登錄。將網絡令牌從後端傳遞到前端(Node.js + Express轉換爲AngularJS)

下面是從Node.js的護照認證中間件例的片:

app.get('/auth/facebook/callback', 
    passport.authenticate('service', { session: false }), 
    function(req, res) { 
    // Successful authentication, redirect home. 
    // I have access to web token here 
    res.redirect('/'); 
    }); 

的問題是如何修改上面的代碼通過網絡令牌我在function(req, res)獲得的Node.js後端AngularJS前端假設我的AngularJS應用程序在http://example.com託管,而在登錄亞馬遜後,該應用程序被重定向到http://example.com/auth/facebook/callback URL。

回答

1

好吧。第一種方法是將其設置爲如下所示的Cookie。我仍然想知道其他選項是什麼。

app.get('/auth/facebook/callback', 
    passport.authenticate('facebook', { 
     session: true 
    }), function(req, res) { 
     res.cookie('token', '1234567890', { 
      maxAge: 3600000 
     }); 
     res.redirect('/'); 
    } 
); 
+1

並且不要忘記簽名您的cookies,例如response.cookie(「token」,「1234567890」,{signed:true,httpOnly:true}); – 2014-10-16 12:13:38

+0

@TienDo謝謝! – krl 2014-10-17 12:06:39

3

我打算假設您使用Express。據我瞭解,訪問令牌將被存儲在req變量的某個地方(例如,req.session.amazon ....),但我並不確定自己沒有使用過亞馬遜。這可以傳遞給Express渲染器幷包含在模板中。

res.render('myTemplate', { 
    amazon_access_token : req.session.amazon.token // example 
}); 

然後在你的模板(在文件中的這種情況下,把手稱爲myTemplate.hbs):

<script> 
    var myAccessToken = {amazon_access_token}; 

    // Angular code 

</script> 
+0

好的。但是如果我根本不使用服務器端模板?我在前端安裝了AngularJS應用程序。 – krl 2014-10-06 12:12:38

+0

從前端使用ajax調用。如果Node/Express不生成HTML,則Angular應用程序需要使用$ http服務從Node + Express應用程序請求令牌。或者使用套接字,但這會讓事情變得過於複雜。 – lewis 2014-10-07 12:37:57

+0

但是我的Angular應用如何識別自己以請求令牌?在這種情況下,服務器如何區分10種不同的Angular客戶端? – krl 2014-10-08 08:08:01

相關問題