Passport Facebook - 无法发送令牌

时间:2016-03-14 12:38:46

标签: angularjs node.js facebook passport.js passport-facebook

更新:下面的当前解决方案。

我将facebook登录添加到我的网站 - 我希望这很简单,但证明很难。

(内置:Node.js / Express API和Angular前端)

所以我的问题我请求帮助:

1 - 而不是successRedirect返回令牌

我使用passport-facebook来帮助登录过程,但是在回调而不是successRedirect中,我只能说返回一些包含令牌的json。请注意,令牌是我已经使用标准电子邮件身份验证的JWT令牌,我目前在passport.serializeUser创建此令牌:

passport.serializeUser(function(user, done) {
  var token = ///implementation for token
  done(null, user);
});

然后在回调中执行类似的操作:

router.get('/login/facebook/callback',
  passport.authenticate('facebook', {
     res.json({success: true, token:token)
  })
);  

2 - 如何处理客户端

然后我无法理解的第二点是,如果我退回令牌,在我的客户端,我将会选择'通常的$http.get方法。但是URL流程将如何工作 - 我的意思是我有一个登录Facebook'按钮,然后调用服务器端router.get('/login/facebook',重定向到Facebook登录页面,这样一旦完成并返回一个令牌,它将如何知道返回主页。

希望我的上述问题有意义 - 我是Angular的新手,所以请原谅我,如果不清楚我能解释的最好的意愿。

解决方案(请告诉我你的想法,如果有什么不好我做的事) 经过一番思考后,我用以下方法解决了这个问题:

1 - 在回调中,我创建了一个新的API get路由。然后,我在URL中发送用户ID以创建我的自定义JWT令牌:

router.get('/login/facebook/callback',
  passport.authenticate('facebook',
          { session: false, failureRedirect: "/processfblogin/false"  }),
  function(req, res) {
    res.redirect("/api/processfblogin/" + req.user._id);
  }
);

然后从这里开始制作令牌并发送URL。

所以这就是有趣的地方。理想情况下我想使用$http get但是CORs一直给我302.所以最后我将令牌附加为URL参数并将其发送为:

res.redirect('http://localhost:3000/#/fbToProcess/' + token);

然后,我使用自己的控制器制作了这个单页,只需获取令牌,保存它,并在我的页面上进行任何明智的点击。

我将继续寻找一种在json响应中发送令牌的方法,这样用户就不需要转到这个新的空页面,但在此之前它起作用了: - )

0 个答案:

没有答案