Passportjs Facebookloginstream程(passport-facebook vs passport-token)
使用Node,Express和Passport。
好的,我和我的团队正在构build双面市场types应用程序的REST API。 我们已经为电子邮件和密码login设置了一个基本的LocalStrategy。
我们希望使API用户代理不可知,所以我们可以通过web,Android或iOS使用API。
但是我们感到困惑的是FBloginstream程。 问题是,Passportjs幕后究竟发生了什么。 我们已经考虑过“护照 – 脸书”和“护照 – 脸书 – 标记”的策略,并不能真正决定去哪一个。
这是我目前对stream量的理解:
如果这是正确的,我最好让客户端从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
- 服务器validation
Facebook token
有关如何validationFacebook token
更多信息。
2.使用JSON Web令牌(JWT)
- 服务器返回Facebook用户信息后返回
JWT
- 客户端每次调用API时都会发送
JWT
- 服务器validation
JWT
这样,服务器不必将请求发送到Facebook来validationFacebook token
。 更多信息在这里 。
问:如果我使用passport-facebook-token,我该如何告诉用户去facebook上login
您的/api/auth/facebook
只接受Facebook token
并返回相应的HTTP code
。 因此,要求用户去Facebooklogin是客户的工作。
有关如何在此处手动创buildFacebooklogin的更多信息。
- Facebook OauthException代码2
- 用ClaudiaJS和AWS Lambda发送POST HTTP
- XMLHttpRequest无法加载https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=
- Facebook Messenger,发送收据时临时发送邮件失败
- 护照authentication失败导致redirect循环
- passportjs + facebook +当前用户
- Parse.com:你如何获得本地运行的Node.js服务器上的当前用户?
- 从Node.js服务器自动发布到我的Facebook页面
- Mongoose schematype.castForQuery错误。 用户身份validation失败