我正在使用Firebase创建注册和登录活动
我有一个像这样的用户类
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) {
//
}
});
}
});
因此每个用户的primary_key是电子邮件地址
我想知道有没有办法在Firebase中使用push()方法来创建用户(自动生成primary_key)并获取Firebase为每个用户提供的密钥并将其存储在属性&#34; mProviderId&#34; ?,这是在Firebase中创建用户的正确方法吗?
感谢阅读。
更新日期3/22/2018 - 我想我找到了答案
经过几天的研究和编码后,我发现创建用户的正确方法是使用Firebase自动为您提供的UID(唯一标识符)。并将其与用户信息一起存储在数据库中(UID作为密钥,用户信息作为价值。这种方式由先生 @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);
}
});
感谢大家回答我的问题。
答案 0 :(得分:2)
使用FirebaseUser的uid(唯一ID)来识别数据库中存储信息的位置是常规的。根据定义,uid是唯一的。
String uid = authResult.getUser().getUid();
答案 1 :(得分:0)
是的,您可以通过这种方式获得推送密钥。
String providerId = users.push().getKey();
users.setProviderId(providerId);
users.child(user.getEmail())
.set(user)...
注意:推送密钥由firebase生成,它被保证是唯一的。
如果您使用的是firebase auth,那么auth.getUser().getUid();
也是指示唯一身份用户的更好选择。
希望这会对你有所帮助。
答案 2 :(得分:0)
是的,你可以使用firebase密钥因为genarate唯一,因为我总是在表中使用该密钥。
String id=mFirebaseDatabase.push().getKey();
User user = new User(id,name);
mFirebaseDatabase.child(id).setValue(user); // you can also used id as a child node.