Firebase Facebook验证:电子邮件验证始终为假

Firebase Facebook验证:电子邮件验证始终为假,firebase,firebase-authentication,Firebase,Firebase Authentication,正如标题中所说,无论我如何尝试Facebook登录,emailVerified字段总是错误的。这是故意的吗?到目前为止,我已经阅读了整个firebase文档,似乎找不到任何与此相关的信息。只是想确定一下:我尝试了4个不同的验证的帐户,结果总是一样的。你知道是什么导致了这种行为吗?Firebase提供了一个“验证”电子邮件地址的过程——但还不是所有平台都有。此功能不适用于Android。。。事实上,人们甚至无法查询电子邮件是否已使用Android代码验证(即使您使用web或服务器代码执行验证) “

正如标题中所说,无论我如何尝试Facebook登录,
emailVerified
字段总是错误的。这是故意的吗?到目前为止,我已经阅读了整个firebase文档,似乎找不到任何与此相关的信息。只是想确定一下:我尝试了4个不同的验证的帐户,结果总是一样的。你知道是什么导致了这种行为吗?

Firebase提供了一个“验证”电子邮件地址的过程——但还不是所有平台都有。此功能不适用于Android。。。事实上,人们甚至无法查询电子邮件是否已使用Android代码验证(即使您使用web或服务器代码执行验证)

“预期”过程通常是:

  • 验证用户的电子邮件(使用任何提供商)
  • 调用Firebase函数发送电子邮件进行验证
  • 通过使用客户端设置verified Check来响应验证链接,以查看电子邮件是否已验证(可能需要几天的时间) (要处理的用户)
  • 在验证电子邮件之前,禁止使用适当的
    代码中的函数(例如链接不同的已验证函数
    供应商)

  • 如果您当前使用的是Android客户端,则无法启动第2步。

    谷歌提供商电子邮件得到验证而Facebook电子邮件没有得到验证的原因是,谷歌被认为是一个值得信任的提供商(您可以使用谷歌创建一个电子邮件帐户)。让我们再举一个例子。如果你与雅虎建立了一封电子邮件,你将收到一封电子邮件myself@yahoo.com. 如果您使用yahoo OAuth 2.0登录,您肯定知道该用户已被验证,因为yahoo是该电子邮件地址的实际所有者和颁发者。但是,您也可以使用同一封电子邮件创建facebook帐户或其他帐户,如github或twitter,并使用您的电话号码或其他方式进行验证。在这种情况下,如果您使用Facebook登录,则不会验证电子邮件(Facebook不拥有或管理该电子邮件地址)。通常情况下,如果您希望在这种情况下验证电子邮件,您必须发送电子邮件验证(目前处于试验阶段,仅在web和iOS中提供,但最终应使用android)。

    我提供的解决方案可能对OP没有用,因为它是去年提出的,但希望它能帮助其他人。虽然我同意bojeil的回答,但对于真正的用户来说,在登录Facebook时验证他们的Facebook电子邮件地址有些烦人

    我今天在Android上遇到了这个问题,并应用了一个变通方法,因为
    isEmailVerified()
    如果条件总是抛出false并将用户返回到登录页面,下面是从我的代码中提取的变通方法:

    FirebaseUser  mUser = mAuth.getCurrentUser();
    
    
            if(!mUser.getProviders().get(0).equals("facebook.com")) {
    
                if (mUser.isEmailVerified()) {
    
                    Intent mainIntent = new Intent(getActivity(), MainActivity.class);
                    mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(mainIntent);
    
    
                } else {
    
                    Snackbar.make(getView().findViewById(R.id.loginLayout), "Please verify your account!", Snackbar.LENGTH_LONG).show();
    
                }
    
            }else{
    
                Intent mainIntent = new Intent(getActivity(), MainActivity.class);
                mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(mainIntent);
    
            }
    

    第一个If语句检查用户是否正在使用Facebook登录,如果是,则将用户带到main活动,如果不是,则通常为电子邮件/密码用户和Google登录用户调用
    isEmailVerified()
    方法
    isEmailVerified()
    始终返回true。

    代码的位置在哪里?你也在facebook开发者上创建了应用程序吗?我真的不确定这里需要什么样的代码,auth工作正常,其他一切都正常,我得到了显示名称、照片url,一切。只有
    emailVerified
    字段始终为false。显然,我已经创建了一个Facebook应用程序。我使用的是web sdk,而不是android。我知道电子邮件验证过程,而且工作正常,但我不希望用户验证他们的电子邮件地址,因为事实上它已经被Facebook验证过了。如果我用谷歌测试auth,
    emailVerified
    字段是
    true
    ,因此它肯定在那里工作。我想知道为什么它不适用于Facebook。因为我在Facebook上注册时使用的电子邮件不是他们的。谷歌@andrewIn不是这样的,这是文档应该清楚的。AFAIK Facebook仅在电子邮件经过验证后返回,这意味着如果电子邮件存在,则字段应为
    true
    ,如果电子邮件不存在,则字段应为false。这至少是我所期望的。我到处都能看到这个原因,但显然这不包括在使用Apple登录时。Apple登录返回的电子邮件始终被视为已在Firebase Auth中验证。这种行为的原因是什么,因为在大多数情况下,苹果也不是电子邮件地址的所有者或发行者。正如Andrew提到的,如果Facebook用户仅通过电话号码验证,Facebook不会返回电子邮件地址。