为什么我看不到这个用户的用户名?
Why cant I see the username of this user?
我正在使用 Firebase 通过电子邮件和密码进行用户身份验证,我想从 authData
检索用户的用户名,但我只看到 uid
。我想检索用户名,以便可以在另一个 activity 上显示它。
这是我的代码:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ref.authWithPassword(email.getText().toString(), password.getText().toString(), new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
setContentView(R.layout.activity_user_display);
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());
}
else
{
Context c = getApplicationContext();
Toast t = Toast.makeText(c, "You thought you had it", Toast.LENGTH_SHORT);
}
ref.child("users").child(authData.getUid()).setValue(map);
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
Context c = getApplicationContext();
Toast error = Toast.makeText(c,"Sorry :)",Toast.LENGTH_SHORT);
}
});
}
});`
结果是上面代码的结果:
谢谢。
或许,您应该创建一个单独的数据库来存储客户的用户名。由于 uid 存储了该特定客户端的所有信息,您可能需要一个单独的数据库。
这可能对您有帮助:
About Authentication using email
Similar Question for retrieving email in FireBase
希望对你有所帮助。
当您使用电子邮件和密码身份验证时,Firebase 只需要一个电子邮件地址和相应的密码来对用户进行身份验证。与社交提供商(Google、Facebook、Twitter、Github)不同,Firebase 在底层提供商中没有查找其他字段。请参阅 properties that are available in authData
for the email+password provider.
的文档
您可以轻松地将 displayName
字段添加到您的 sign-up 表单,但您必须自己跟踪并使用不同的代码路径将其存储在数据库中。例如
Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.createUser(email.getText().toString(), password.getText().toString(), new Firebase.ValueResultHandler<Map<String, Object>>() {
@Override
public void onSuccess(Map<String, Object> result) {
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());
}
else {
// read the display name from the text field
map.put("displayName", displayName.getText().toString);
}
ref.child("users").child(authData.getUid()).setValue(map);
}
@Override
public void onError(FirebaseError firebaseError) {
// there was an error
}
});
然后在您的 sign-in 流程中,确保不要使用 updateChildren()
覆盖显示名称
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ref.authWithPassword(email.getText().toString(), password.getText().toString(), new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
setContentView(R.layout.activity_user_display);
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()).updateChildren(map);
}
我正在使用 Firebase 通过电子邮件和密码进行用户身份验证,我想从 authData
检索用户的用户名,但我只看到 uid
。我想检索用户名,以便可以在另一个 activity 上显示它。
这是我的代码:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ref.authWithPassword(email.getText().toString(), password.getText().toString(), new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
setContentView(R.layout.activity_user_display);
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());
}
else
{
Context c = getApplicationContext();
Toast t = Toast.makeText(c, "You thought you had it", Toast.LENGTH_SHORT);
}
ref.child("users").child(authData.getUid()).setValue(map);
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
Context c = getApplicationContext();
Toast error = Toast.makeText(c,"Sorry :)",Toast.LENGTH_SHORT);
}
});
}
});`
结果是上面代码的结果:
谢谢。
或许,您应该创建一个单独的数据库来存储客户的用户名。由于 uid 存储了该特定客户端的所有信息,您可能需要一个单独的数据库。
这可能对您有帮助:
About Authentication using email
Similar Question for retrieving email in FireBase
希望对你有所帮助。
当您使用电子邮件和密码身份验证时,Firebase 只需要一个电子邮件地址和相应的密码来对用户进行身份验证。与社交提供商(Google、Facebook、Twitter、Github)不同,Firebase 在底层提供商中没有查找其他字段。请参阅 properties that are available in authData
for the email+password provider.
您可以轻松地将 displayName
字段添加到您的 sign-up 表单,但您必须自己跟踪并使用不同的代码路径将其存储在数据库中。例如
Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.createUser(email.getText().toString(), password.getText().toString(), new Firebase.ValueResultHandler<Map<String, Object>>() {
@Override
public void onSuccess(Map<String, Object> result) {
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());
}
else {
// read the display name from the text field
map.put("displayName", displayName.getText().toString);
}
ref.child("users").child(authData.getUid()).setValue(map);
}
@Override
public void onError(FirebaseError firebaseError) {
// there was an error
}
});
然后在您的 sign-in 流程中,确保不要使用 updateChildren()
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ref.authWithPassword(email.getText().toString(), password.getText().toString(), new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
setContentView(R.layout.activity_user_display);
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()).updateChildren(map);
}