2014-10-04 50 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

相关问题