护照Facebook-无法阻止发送令牌

use*_*od2 5 facebook node.js angularjs passport-facebook passport.js

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

我要在我的网站上添加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);
});
Run Code Online (Sandbox Code Playgroud)

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

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

2-客户端如何处理

然后我无法理解的第二点是如果我返回令牌,那么在我的客户端,我将以一种通常的$http.get方法“挑选”该令牌。但是URL流将如何工作-通过这个,我的意思是我有一个“使用Facebook登录”按钮,然后调用服务器端router.get('/login/facebook',该服务器端重定向到Facebook登录页面,因此一旦完成并返回令牌,它将如何知道回到首页。

希望我上面的问题有意义-对Angular来说是新来的,所以请原谅我,如果不清楚,我会尽力解释。


解决方案(如果我做的不好的事情,请让我知道您的想法)因此,经过更多的思考,我使用以下方法解决了这个问题:

1-在回调中,我做了一个新的API获取路由。然后,我在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);
  }
);
Run Code Online (Sandbox Code Playgroud)

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

这就是它变得有趣的地方。理想情况下,我想使用$httpget,但是COR一直给我一个302。因此,最终我将令牌附加为URL参数,并将其发送为:

res.redirect('http://localhost:3000/#/fbToProcess/' + token);
Run Code Online (Sandbox Code Playgroud)

然后,我用自己的控制器制作了该页面,该控制器仅获取令牌,将其保存并在身份验证页面上点击了所有内容。

我将继续寻找一种在json响应中发送令牌的方法,以便用户无需进入这个新的空白页面,但是在此之前它是可行的:-)