存储用户数据示例 - 显示名称未显示在数据库

时间:2016-01-25 23:22:03

标签: android firebase firebase-authentication

有点困惑为什么我的Firebase数据库中没有显示显示名称,我已经按照他们网站上示例中的步骤操作,并且没有得到他们显示的预期结果。这是示例代码。

final Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.authWithPassword("jenny@example.com", "correcthorsebatterystaple",
    new Firebase.AuthResultHandler() {
    @Override
    public void onAuthenticated(AuthData authData) {
        // Authentication just completed successfully :)
        Map<String, String> map = new HashMap<String, String>();
        map.put("provider", authData.getProvider());
        if(authData.getProviderData().containsKey("displayName")) {
            map.put("displayName", authData.getProviderData().get("displayName").toString());
        }
        ref.child("users").child(authData.getUid()).setValue(map);
    }
    @Override
    public void onAuthenticationError(FirebaseError error) {
        // Something went wrong :(
    }
});

每当我尝试使用此示例代码时,预期结果与下面显示的内容类似。

{
  "users": {
    "6d914336-d254-4fdb-8520-68b740e047e4": {
      "displayName": "alanisawesome",
      "provider": "password"
    },
    "002a448c-30c0-4b87-a16b-f70dfebe3386": {
      "displayName": "gracehop",
      "provider": "password"
    }
  }
}

在我的数据库中,只显示提供程序而不是displayName,而不是显示类似于上面的内容。是否需要执行displayName才能显示或是否应该自动执行此操作?

我试着查看这个内容,看看authData.getProviderData()中包含的内容,这是我打印出来时在控制台中生成的内容。

01-25 17:58:51.921 15651-15651/<package-name> I/System.out: {email=j.joe@hotmail.co.uk, isTemporaryPassword=false, profileImageURL=https://secure.gravatar.com/avatar/de53da9874178adb1a44b392ba5bed2f?d=retro}

因此,从结果中产生了它让我想知道关键字&#34; displayName&#34;以前是通过电子邮件自动创建的,并默认存储在authData.getProviderData()中,这就是为什么它不再显示。

如果有人可以解释数据库中displayName的来源,我会很感激,因为根据预期的结果判断我似乎错过了什么。

谢谢!

1 个答案:

答案 0 :(得分:3)

电子邮件+密码帐户没有关联的显示名称。它只需要一个电子邮件地址和一个密码。

您绝对可以要求用户输入其他信息。请不要将其传递给createUser(),并在致电authWithPassword()后不要覆盖它。

更新:自从Google I / O 2016发布Firebase身份验证更新后,现在每个用户都有一个显示名称属性。因此,您还可以将显示名称保留在Firebase身份验证中(尽管您无法查询/搜索它)。