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

Storing user data example - display name not showing in database

有点困惑为什么我的 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 是否需要任何必要的步骤,还是应该自动显示?

我试图查看它以查看 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}

所以从生成的结果来看,我想知道密钥 "displayName" 以前是否是从电子邮件自动创建并默认存储在 authData.getProviderData() 中,这就是它不再显示的原因。

如果有人能解释数据库中 displayName 的来源,我将不胜感激,因为从预期结果来看,我似乎遗漏了一些东西。

谢谢!

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

你绝对可以要求用户输入额外的信息。只是不要将它传递给 createUser() 并且在调用 authWithPassword() 后不要覆盖它。

更新:自 2016 年 Google I/O 发布 Firebase 身份验证更新以来,现在有一个 显示名称 属性 每个用户。因此,您还可以在 Firebase 身份验证本身中保留显示名称(尽管您将无法 query/search)。