首页 > 解决方案 > 电子邮件作为firebase中的ID

问题描述

我可以像在 Firebase中那样使用用户的电子邮件,而不是使用push()to generate吗?idchild(user)id

我试过这个:

    private void userData(String emai1, String pass, String bal) {

    String id = emai1;
    int balance=Integer.valueOf(String.valueOf(bal));
    User user1 = new User(id,emai1,pass,balance);
    databaseReference.child(id).setValue(user1);

}

用户等级:

public class User {

 private String email;
 private int balance;
 private String password;
 private String id;

public User( String id,String email, String password , int balance) {
    this.email = email;
    this.balance = balance;
    this.password = password;
    this.id = id;
}



public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public int getBalance() {
    return balance;
}

public void setBalance(int balance) {
    this.balance = balance;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

}

由于我使用了 firebase auth,因此用户已注册,但他的信息并未添加到 firebase 数据库中。

顺便说一句,在尝试此操作之前,我一直在使用push()id并且一切正常,但我希望电子邮件作为id生成新的id(因为电子邮件无论如何都是独一无二的。)

标签: javaandroidfirebasefirebase-realtime-database

解决方案


您不能使用电子邮件作为唯一键,因为它包含.数据库中不允许的点。

由于您使用了 firebase 身份验证,因此只需使用用户唯一 ID 而不是push()

 FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
 String userId=user.getUid();

这将为您提供 id,然后您也可以在数据库中使用它。

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("users").child(userId);
ref.child("name").setValue("name_here");
ref.child("email").setValue("email_here");

然后你会有:

users
  userId
    name: name_here
    email: email_here

也检查一下:

为什么在 Firebase 中使用 UID?我应该使用它吗


推荐阅读