存储用户数据示例 - 显示名称未显示在数据库中
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)。
有点困惑为什么我的 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)。