【问题标题】:Make username unique and save it on the Firebase Database使用户名唯一并将其保存在 Firebase 数据库中
【发布时间】:2020-03-06 18:17:12
【问题描述】:

我正在开发一个需要用户注册/登录才能访问它的 Android 应用程序 (Android Studio)。我正在使用 firebase 来存储注册用户。目前,注册表格采用用户的电子邮件、密码和姓名,登录只需要电子邮件和密码。这是我的注册活动:

 private void createUserAccount(final String email, final String name, String password) {
        mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {

            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
               if(task.isSuccessful()){
                   showMessage("Account Created");
                   updateUserInfo(name, pickedImgUri,mAuth.getCurrentUser());
               }
               else{
                   showMessage("account_activity creation failed" + task.getException().getMessage());
                   regBtn.setVisibility(View.VISIBLE);
                   loadingProgress.setVisibility(View.INVISIBLE);
               }
            }
        });

    }
           private void updateUserInfo(final String name, Uri pickedImgUri, final FirebaseUser currentUser) {
            StorageReference mStorage = FirebaseStorage.getInstance().getReference().child("user_photos");
            final StorageReference imageFilePath = mStorage.child(pickedImgUri.getLastPathSegment());
            imageFilePath.putFile(pickedImgUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    imageFilePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            UserProfileChangeRequest profileUpdate = new UserProfileChangeRequest.Builder()
                                    .setDisplayName(name)
                                    .setPhotoUri(uri)
                                    .build();

                            currentUser.updateProfile(profileUpdate)
                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            if (task.isSuccessful()){
                                                showMessage("Register complete");
                                                UpdateUI();
                                            }
                                        }
                                    });
                        }
                    });
                }
            });

    }

如何添加用户名字段并使其对每个用户都是唯一的?是否可以让所有用户信息出现在 Firebase 数据库中而不是在身份验证下?

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    您无法在 auth 用户上创建超出现有内容的配置文件字段。

    对于用户名,您最好在 firestore 中创建一个 users 集合。每个条目都可以由auth 分配的用户UID 键入。创建条目时,使用username 字段创建它。然后,在任何新用户锁定其用户名之前,您可以使用 where('username', '==', $username) 对 firestore 运行查询,其中 $username 是用户尝试保留的名称。如果记录存在,则使用用户名,用户将不得不选择其他内容。

    这是一个 YouTube 教程,介绍如何将 authfirestore 一起用于像您这样的用例:https://www.youtube.com/watch?v=qWy9ylc3f9U

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 2022-12-09
      相关资源
      最近更新 更多