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