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

时间:2018-03-19 05:20:23

标签: android firebase authentication firebase-authentication

我正在使用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);
                            }
                        });

感谢大家回答我的问题。

3 个答案:

答案 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.