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响应中发送令牌的方法,以便用户无需进入这个新的空白页面,但是在此之前它是可行的:-)
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |