我正在使用Firebase通过电子邮件和密码进行用户身份验证,我想从authData
检索用户的用户名,但我只看到uid
。我想检索用户名,以便我可以在另一个活动上显示它。
这是我的代码:
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);
}
});
}
});`
结果是上面代码的结果:
谢谢。
答案 0 :(得分:2)
您可能应该创建一个单独的数据库来存储客户端的用户名。由于uid存储了该特定客户端的所有信息,因此您可能需要一个单独的数据库。
这可能会对您有所帮助:
About Authentication using email
Similar Question for retrieving email in FireBase
希望它对你有所帮助。
答案 1 :(得分:1)
使用电子邮件和密码验证时,Firebase仅需要电子邮件地址和相应的密码来验证用户身份。与社交提供商(Google,Facebook,Twitter,Github)不同,Firebase在底层提供商中没有其他字段。请参阅properties that are available in authData
for the email+password provider的文档。
您可以轻松地在注册表单中添加displayName
字段,但您必须自己跟踪并使用不同的代码路径将其存储在数据库中。 E.g。
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
}
});
然后在您的登录流程中,只需确保不使用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);
}