Passport-Facebook身份validation不提供所有Facebook帐户的电子邮件
我正在使用Passport-Facebook身份validation。
passport.use(新FacebookStrategy({ clientID:'CLIENT_ID', clientSecret:'CLIENT_SECRET', callbackURL:“http://www.example.com/auth/facebook/callback” }, 函数(accessToken,refreshToken,profile,done){ process.nextTick(function(){ 执行console.log(configuration文件) }); } ));
对于一些Facebook帐户,我没有得到email_id,我甚至尝试通过使用一个范围variables如下,但我仍然无法得到email_id。
profileUrl:“”和ProfileFields:['','']
确保这两个东西在你的代码中:
passport.use(new FacebookStrategy({ clientID: 'CLIENT_ID', clientSecret: 'CLIENT_SECRET', callbackURL: "http://www.example.com/auth/facebook/callback" passReqToCallback : true, profileFields: ['id', 'emails', 'name'] //This },
和这个:
app.get('/connect/facebook', passport.authorize('facebook', { scope : ['email'] }));
这使您可以访问以下内容:
- profile.id
- profile.name.givenName
- profile.name.familyName
- profile.emails
最后一个是数组,所以使用profile.emails[0].value
来获取用户的第一个电子邮件地址。
正如shamim reza
指出的那样,您可能需要检查profile.emails !== undefined
因为如果用户至less有一个经过validation的电子邮件地址,则该属性才存在。
当您进行身份validation时,请使用类似于此的内容。 validation时,您需要在范围内使用添加“电子邮件”。
app.get('/auth/facebook', passport.authenticate('facebook', { scope: ['email']}), function(req, res){ });
这对我有效。
这里有几个链接帮助我。
https://github.com/jaredhanson/passport-facebook/issues/11 https://github.com/jaredhanson/passport-facebook#how-do-i-ask-a-user-for-additional-permissions
我想在这里添加更多的信息。
在创buildFacebookStrategy和passport.authorize('facebook', { scope : ['email'] })
添加profileFields: ['emails']
解决了大多数用户的问题。
还有其他可能的原因,你authentication后不会得到用户的电子邮件。
- 帐户没有电子邮件地址
- 帐户中没有确认的电子邮件地址
- 帐户中没有经过validation的电子邮件地址
- 用户进入了一个安全检查点,要求他们重新确认他们的电子邮件地址,但他们还没有这样做
- 用户的电子邮件地址不可用
您需要确保您的用户没有上面列出的任何问题。 更多的信息可以在https://developers.facebook.com/bugs/1802930019968631/find
您可以使用在passport-facebook
网站中提供的代码作为起点。 然后,要访问电子邮件,请确保检查@ Forivin的答案 。
passport.use(new FacebookStrategy({ clientID: 'CLIENT_ID', clientSecret: 'CLIENT_SECRET', callbackURL: "http://www.example.com/auth/facebook/callback" }, function (accessToken, refreshToken, profile, done) { process.nextTick(function () { console.log(profile) }); } ));
- 如何在JavaScript中获得redis中的所有键和值?
- 我可以在JSDOC里面有variables吗?
- 当执行一个更复杂的GET时,Express JS会返回404,然后localhost / users(localhost / users / about)
- Node.js Express haml不能正确渲染
- 未定义的NodeJS'toUpperCase'(由typescript生成)
- 什么是最有效的方法来读取节点JS中的文件的第一行?
- 在执行剩下的testing时保持nodeJs服务器运行
- 如何与AdonisJs一起使用React.js
- 要求highcharts-browserify使用特定版本的highcharts?