在Android应用中使用Firebase(BaaS)存储电子邮件和密码时,如何包含用户名?

You*_*ode 23 android firebase firebase-authentication firebase-realtime-database

Firebase createUser()方法需要一个电子邮件和密码字段,但是如果我还想让用户使用类似于Snapchat,Instagram,StackOverflow等的自定义用户名呢?是否有任何方法可以修改现有方法以接受该字段,或者我是否需要手动推送和管理此信息,如果是这样的话?

这是我第一次尝试存储所需的用户信息:

Firebase ref = new Firebase(firebaseURL);
ref.createUser(email, password, new Firebase.ValueResultHandler<Map<String, Object>>() {
@Override
public void onSuccess(Map<String, Object> result) {
System.out.println("Successfully created user account with uid: " + result.get("uid"));

//Sign user in
Firebase ref = new Firebase(firebaseURL);
ref.authWithPassword(email, password, new Firebase.AuthResultHandler() {

@Override
public void onAuthenticated(AuthData authData) {
System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());

//Save user info
Firebase userRef = new Firebase(firebaseURL + "Users/");
User user = new User(username, authData.getUid());
userRef.setValue(user);
Run Code Online (Sandbox Code Playgroud)

这是好习惯吗?我想用存储用户名的UID可以帮助我将来处理更改等.另外,我应该实现updateChildren()push()方法,以便如果这是一个社交媒体应用程序,条目不会被覆盖?

这是我的第二次尝试:

  @Override
  public void onAuthenticated(AuthData authData) {
  System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());

  //Save user info and username
  Firebase ref = new Firebase(firebaseURL);
  Map<String, String> map = new HashMap<String, String>();
  map.put("email", email);
  map.put("username", username);
  map.put("provider", authData.getProvider());

  ref.child("users").child(authData.getUid()).setValue(map);
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 15

显示包含三个字段的表单:

  1. 用户名
  2. 电子邮件地址
  3. 密码

将后两者发送到Firebase的createUser()方法.然后在完成回调中,将所有信息存储在Firebase数据库中.

var userName, emailAddress, password;

// TODO: read these values from a form where the user entered them

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.createUser({
  email    : emailAddress,
  password : password
}, function(error, authData) {
  if (error) {
    console.log("Error creating user:", error);
  } else {
    // save the user's profile into the database so we can list users,
    // use them in Security and Firebase Rules, and show profiles
    ref.child("users").child(authData.uid).set({
      provider: authData.provider,
      name: userName
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此页面,了解有关在Firebase文档中存储用户数据的信息.

  • 这么晚才回复很抱歉。这似乎是针对 Javascript 的。我需要为 Android 的 Java。每个人的设置似乎略有不同,我在翻译时遇到了麻烦。 (2认同)
  • 代码是用JavaScript编写的,应该是用Java编写的! (2认同)
  • 如果在创建帐户之后但在设置用户名之前断开用户的连接,这不会引起问题吗? (2认同)

ost*_*lub 13

是的,有一种方法可以更新Firebase中的用户信息.您所需要的一切 - 在Firebase文档中阅读本文并实现此处描述的方法更新用户信息

使用此方法可以更新FirabaseUser对象的diplayName属性.只需为displayName属性设置用户名并提交更改即可.

我希望这能帮到您.

  • 即使其他答案是有效的,这也是问题的真实答案。 (2认同)