Passportjs Facebookloginstream程(passport-facebook vs passport-token)

使用Node,Express和Passport。

好的,我和我的团队正在构build双面市场types应用程序的REST API。 我们已经为电子邮件和密码login设置了一个基本的LocalStrategy。

我们希望使API用户代理不可知,所以我们可以通过web,Android或iOS使用API​​。

但是我们感到困惑的是FBloginstream程。 问题是,Passportjs幕后究竟发生了什么。 我们已经考虑过“护照 – 脸书”和“护照 – 脸书 – 标记”的策略,并不能真正决定去哪一个。

这是我目前对stream量的理解:

护照令牌

护照的Facebook

如果这是正确的,我最好让客户端从FB获取access_token然后发送给我,或者让FB通过redirect和callbackURL处理它?

护照令牌:

passport.use('facebook-token', new FacebookTokenStrategy( { clientID: 'xxx', clientSecret: 'xxx' }, function(accessToken, refreshToken, profile, done) { // asynchronous //console.log("into passport auth"); process.nextTick(function() { User.findOne({'facebook.id': profile.id}, function(error, user) { console.log("user is " + JSON.stringify(user)); console.log("profile is " + JSON.stringify(profile)); //do user creation stuff etc. return done(error, user); }); }); })); authRouter.post('/facebook', passport.authenticate('facebook-token'), function (req, res) { console.log("into controller"); if (req.user){ //log the user in since they successfully authenticated with facebook. req.login(user); res.status(200).end(); } else { res.status(401).end(); } }); 

护照Facebook的:

 passport.use('facebook', new FacebookStrategy( { callbackURL: "http://75.128.65.176:8080/auth/facebook/callback", clientID: 'xxx', clientSecret: 'xxx' }, function(accessToken, refreshToken, profile, done) { // asynchronous //console.log("into passport auth"); process.nextTick(function() { User.findOne({'facebook.id': profile.id}, function(error, user) { console.log("user is " + JSON.stringify(user)); console.log("profile is " + JSON.stringify(profile)); //do user creation stuff etc. return done(error, user); }); }); })); // Redirect the user to Facebook for authentication. When complete, // Facebook will redirect the user back to the application at // /auth/facebook/callback authRouter.get('/facebook', passport.authenticate('facebook')); // Facebook will redirect the user to this URL after approval. Finish the // authentication process by attempting to obtain an access token. If // access was granted, the user will be logged in. Otherwise, // authentication has failed. authRouter.get('/facebook/callback', passport.authenticate('facebook', { successRedirect: '/', failureRedirect: '/login' })); 

关于这个stream程如何实际运作的任何细节/阐述将非常感谢!

使用本机iOS和Android Facebook SDK时,客户端Facebookredirect不便,因为它们有时会redirect到用户安装的Facebook应用程序。 因此,如果你想要一个真正的通用API,那么你应该去passport-facebook-token

validation显示的2个stream程是否正确。

是的,他们是正确的。


问:我有一个API列表。 我怎样才能保护他们与护照Facebook的战略

你有多种select:

1.validationFacebook token

  • 服务器返回Facebook token以及用户信息
  • 客户端每次调用API时都会发送Facebook token
  • 服务器validationFacebook token

有关如何validationFacebook token更多信息。

2.使用JSON Web令牌(JWT)

  • 服务器返回Facebook用户信息后返回JWT
  • 客户端每次调用API时都会发送JWT
  • 服务器validationJWT

这样,服务器不必将请求发送到Facebook来validationFacebook token 。 更多信息在这里 。


问:如果我使用passport-facebook-token,我该如何告诉用户去facebook上login

您的/api/auth/facebook只接受Facebook token并返回相应的HTTP code 。 因此,要求用户去Facebooklogin是客户的工作。

有关如何在此处手动创buildFacebooklogin的更多信息。