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

时间:2016-07-15 14:23:30

标签: firebase firebase-authentication

如标题所述,无论我如何尝试Facebook登录,emailVerified字段始终为false。这是设计的吗?我现在已经阅读了整个firebase文档,似乎无法找到有关此问题的任何信息。只是为了确定:我已尝试使用4个不同的已验证帐户,结果始终相同。知道什么可能导致这种行为吗?

3 个答案:

答案 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代码验证电子邮件(即使您使用网络或服务器代码执行验证)。

“预期”过程通常是:

  1. 验证用户的电子邮件(使用任何提供商)
  2. 调用Firebase功能以发送电子邮件进行验证
  3. 通过使用客户端设置经过验证的检查来回复验证链接,以查看是否已验证电子邮件(可能是 用户处理)
  4. 在验证电子邮件之前,不允许适当的 代码中的函数(例如,链接不同的身份验证的 提供者)
  5. 如果您目前使用Android客户端,则无法发起第2步。