如标题所述,无论我如何尝试Facebook登录,emailVerified
字段始终为false。这是设计的吗?我现在已经阅读了整个firebase文档,似乎无法找到有关此问题的任何信息。只是为了确定:我已尝试使用4个不同的已验证帐户,结果始终相同。知道什么可能导致这种行为吗?
答案 0 :(得分:7)
Google供应商电子邮件验证和Facebook电子邮件不被验证的原因是Google被视为受信任的提供商(您可以使用Google创建电子邮件帐户)。让我们再看一个例子。如果您使用雅虎设置电子邮件,您将收到一封电子邮件:him@yahoo.com。如果您使用yahoo OAuth 2.0登录,则可以确定用户已经过验证,因为Yahoo是该电子邮件地址的实际所有者和颁发者。但是,您也可以使用相同的电子邮件创建Facebook帐户或其他帐户,如github或twitter,并使用您的电话号码或其他方式进行验证。在这种情况下,如果您使用Facebook登录,则不会验证电子邮件(Facebook不拥有或管理该电子邮件地址)。通常,如果您希望在这种情况下验证电子邮件,您必须发送电子邮件验证(目前是实验性的,仅适用于网络和iOS,但最终应该发布到Android)。
答案 1 :(得分:7)
我提供的解决方案可能对OP无用,因为它去年被问到,但希望它可以帮助其他人。虽然我同意bojeil的回答,但真正的用户在使用Facebook登录时验证他们的Facebook电子邮件地址有点烦人。
我今天在Android上遇到了这个问题并且应用了isEmailVerified()
以后的解决方法如果条件总是错误并将用户返回到登录页面,这里是从我的代码中提取的工作:
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登录,如果是,则用户被带到MainActivity,如果不是,则电子邮件/密码用户正常调用isEmailVerified()
方法,Google登录用户isEmailVerified()
总是返回true。
答案 2 :(得分:1)
Firebase提供了一个“验证”电子邮件地址的流程 - 但尚未针对所有平台。此功能不适用于Android ...事实上,甚至无法查询是否已使用Android代码验证电子邮件(即使您使用网络或服务器代码执行验证)。
“预期”过程通常是:
如果您目前使用Android客户端,则无法发起第2步。