我正在为"注册并使用Firebase登录"创建一个活动
我有一个User类,如下所示
public class User {
private final String mProviderId;
private final String mEmail;
private final String mPhoneNumber;
private final String mName;
private final Uri mPhotoUri;
}
当用户注册一个新帐户时,我会执行此操作
auth.createUserWithEmailAndPassword(et_email.getText().toString(), et_pass.getText().toString())
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
//Save User to db
User user = new User();
user.setmEmail(et_email.getText().toString());
user.setmName(et_fullname.getText().toString());
user.setPassword(et_pass.getText().toString());
//Use email to key
users.child(user.getEmail())
.setValue(user).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//
}
});
}
});
因此,每个用户的主键是电子邮件地址
我想知道是否有一种方法可以使用Firebase中的push()方法来创建用户(自动生成主键),并获取Firebase为每个用户提供的键,然后将其存储在属性"mProviderId"中?这是在Firebase中创建用户的正确方法吗?
感谢阅读。
- 更新日期3/22/2018-我想我找到了答案**
经过几天的研究和编码,我发现创建用户的正确方法是使用Firebase自动生成的UID(唯一标识符)。并将其与用户信息一起存储在数据库中(UID作为键,用户信息作为值。这种方法是sir**@Doug Stevenson**推荐的。
你可以这样做:
firebaseAuth.signInWithCredential(phoneAuthCredential)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
// Get User Firebase id
String uid = task.getResult().getUser().getUid();
// Create a User
User user = new User();
user.setUserProvideId(uid);
user.setUserName(name);
user.setUserPassword(password);
// Put the User to the FirebaseDatabase with User's information. Use "uid" as a Key and user object as Value.
databaseReference.child("users").child(uid).setValue(user);
}
});
谢谢大家回答我的问题。
3条答案
按热度按时间ncgqoxb01#
传统上使用FirebaseUser的uid(唯一id)来标识数据库中存储信息的位置,根据定义,uid是唯一的。
laximzn52#
是的,你可以用这种方法得到按键.
注:Push键由firebase生成,保证唯一。
如果您使用的是firebase auth,那么
auth.getUser().getUid();
也是指示唯一用户的更好选项。希望这对你有帮助。
t2a7ltrp3#
是的,你可以使用firebase键,因为genarate是唯一的,因为我总是使用该键的id在表中。