在Firebase上创建用户的正确方法?

jgwigjjp  于 2023-02-25  发布在  其他
关注(0)|答案(3)|浏览(103)

我正在为"注册并使用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);
                            }
                        });

谢谢大家回答我的问题。

ncgqoxb0

ncgqoxb01#

传统上使用FirebaseUser的uid(唯一id)来标识数据库中存储信息的位置,根据定义,uid是唯一的。

String uid = authResult.getUser().getUid();
laximzn5

laximzn52#

是的,你可以用这种方法得到按键.

String providerId = users.push().getKey();
users.setProviderId(providerId);
users.child(user.getEmail())
     .set(user)...

注:Push键由firebase生成,保证唯一。
如果您使用的是firebase auth,那么auth.getUser().getUid();也是指示唯一用户的更好选项。
希望这对你有帮助。

t2a7ltrp

t2a7ltrp3#

是的,你可以使用firebase键,因为genarate是唯一的,因为我总是使用该键的id在表中。

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.

相关问题