当前位置: 首页 > 知识库问答 >
问题:

Passport Facebook身份验证未为所有Facebook帐户提供电子邮件

何安宜
2023-03-14

我正在使用Passport Facebook身份验证。

  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)
            });               
        }
    ));

对于一些Facebook帐户,我没有获得电子邮件id,我甚至尝试使用下面这样的范围变量,但仍然无法获得电子邮件id。

profileUrl:“”和ProfileFields:['',]

共有3个答案

伊富
2023-03-14
匿名用户

我想在这里补充更多信息。

在创建FacebookStrategy和passport时添加profileFields:['emails']。authorize('facebook',{scope:['email']})为大多数用户解决了这个问题。

还有其他可能的原因,您将无法在身份验证后收到用户的电子邮件。

  • 帐户上没有电子邮件地址
  • 帐户上没有确认的电子邮件地址
  • 帐户上没有经过验证的电子邮件地址
  • 用户输入了一个安全检查点,要求他们重新确认自己的电子邮件地址,但他们尚未这样做
  • 无法访问用户的电子邮件地址

你需要确保你的用户没有上面列出的任何问题。更多信息可以找到html" target="_blank">https://developers.facebook.com/bugs/1802930019968631/

冯星剑
2023-03-14

当您进行身份验证时,请使用类似的东西。身份验证时,需要在作用域中使用添加“电子邮件”。

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

阎德宇
2023-03-14

确保代码中包含以下两项内容:

  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'] }));

这使您可以访问以下内容:

  • 个人资料。id

最后一个是数组,所以使用profile。电子邮件[0]。值以获取用户的第一个电子邮件地址。

正如shamim-reza所指出的,您可能需要检查profile。电子邮件!==未定义,因为只有当用户至少有一个已验证的电子邮件地址时,该属性才存在。

正如Weft所指出的,您可能必须使用属性email而不是emails

 类似资料:
  • 问题内容: 我检查了用户是否通过电子邮件验证。但是,无论我发送并确认了多少电子邮件,验证状态仍为。检查时我做错什么了吗? 问题答案: 我如何实现此功能的方法是添加一个 带有时间间隔的,它将检查用户是否已通过验证,然后在完成验证后终止计时器。 检查您当前用户状态的功能:

  • 我检查了用户是否通过电子邮件进行验证。但是,无论我发送并确认了多少封电子邮件,验证状态仍然是。我在检查时是否做错了什么?

  • 如何使用firebase中的验证电子邮件验证使用电子邮件和密码登录的用户?这背后的逻辑是如何工作的,它在代码中会是什么样子? 解决方案/帮助:对于那些仍在寻找答案的人,我找到了这篇文章 堆栈溢出 帖子

  • 在本章中,我们将向您展示如何使用Firebase电子邮件/密码身份验证。 创建用户 要对用户进行身份验证,我们可以使用createUserWithEmailAndPassword(email, password)方法。 例子 (Example) 让我们考虑以下示例。 var email = "myemail@email.com"; var password = "mypassword"; fire

  • 我也不会得到一个错误,如果我登录我的电子邮件和密码没有验证电子邮件。 非常感谢你事先的帮助。

  • 在userpool中创建用户时,会使用临时密码发送用户邀请消息,但不会发送电子邮件验证消息 我创建了一个非常简单的设置来尝试aws cognito服务。下面是我在AWS cognito中所做的,我创建了一个用户池,一步一步地如下: 1)你想给你的用户池命名什么 - 现在,池创建后进入了通用设置-用户和组,单击创建用户A创建用户弹出窗口显示:用户名(必需): myEmail地址 向此新用户发送邀请?