首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Passport-Facebook即使在范围内也不提供电子邮件

Passport-Facebook即使在范围内也不提供电子邮件
EN

Stack Overflow用户
提问于 2015-07-08 04:54:01
回答 3查看 10.3K关注 0票数 19

在我的应用程序中,我注册了facebook-strategie,如下所示:但是返回的配置文件不包含email-field……

代码语言:javascript
复制
passport.use(new FacebookStrategy({
        clientID: config.facebook.clientID,
        clientSecret: config.facebook.clientSecret,
        callbackURL: config.facebook.callbackURL,
        passReqToCallback: true
    },
    function(req, accessToken, refreshToken, profile, done) {
        // No email in the following colsole.log
        console.log(JSON.stringify(profile));
    }));

get的获取方式如下:

代码语言:javascript
复制
app.get('/oauth/facebook', passport.authenticate('facebook', {
    failureRedirect: '/login',
    scope:['email']
}));

(所以我在这里使用作用域:Passport-facebook doesn't get email)

在FB-登录页面上,我甚至要求提供电子邮件,我确实提供了:

任何帮助都是非常有用的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-22 13:18:42

从Facebook图APIv2.4中,我们需要显式指定要获取的字段。

Introducing Graph API v2.4

因此,我们可以这样写:

代码语言:javascript
复制
  passport.use(new FacebookStrategy({
      clientID: config.facebook.clientID,
      clientSecret: config.facebook.clientSecret,
      callbackURL: config.facebook.callbackURL,
      profileFields: ['id', 'email', 'gender', 'link', 'locale', 'name', 'timezone', 'updated_time', 'verified'],
    },
票数 69
EN

Stack Overflow用户

发布于 2015-07-09 02:55:50

您确实有代码的回调部分,对吗?

代码语言:javascript
复制
app.get('/oauth/facebook/callback', passport.authenticate('facebook', {
    failureRedirect: '/login',
    successRedirect: '/',
    scope:['email']
}));

而且,是的,确实应该根据您的链接和这个here also中的说明,使用scope:['email']完成此操作。

票数 2
EN

Stack Overflow用户

发布于 2019-06-11 14:29:32

您需要指定作用域:"email“。请参考下面的代码。

Facebook身份验证路由:

代码语言:javascript
复制
// auth facebook
router.get("/auth/facebook", passport.authenticate("facebook", {
  scope: "email"
}));

在配置FacebookStrategy时,您还需要指定profileFields。

代码语言:javascript
复制
passport.use(new FacebookStrategy({
  callbackURL: "http://localhost:5000/auth/facebook/redirect",
  clientID: keys.facebook.clientID,
  clientSecret: keys.facebook.clientSecret,
  profileFields: ['id', 'displayName', 'photos', 'email', 'gender', 'name']
}, (accessToken, refreshToken, profile, done) => {
   // logic 
}))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31279066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档