【问题标题】:How to add DisplayName with email + password authentication in Firebase? Android如何在 Firebase 中添加带有电子邮件+密码身份验证的 DisplayName?安卓
【发布时间】:2016-10-01 09:12:17
【问题描述】:
private void registerUser(){
String emailId = email.getText().toString().trim().toLowerCase();
String password = pass.getText().toString().trim();

firebaseAuth.createUserWithEmailAndPassword(emailId,password)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                progressDialog.dismiss();
                if(task.isSuccessful()){
                    Toast.makeText(MainActivity.this,"Registration Successful",Toast.LENGTH_SHORT).show();

                    //show chatroom
                    finish();
                    startActivity(new Intent(getApplicationContext(),ProfileActivity.class));
                }
                else{
                    Toast.makeText(MainActivity.this,"Registration Failed. Please try again",Toast.LENGTH_SHORT).show();
                }
            }
        });
}

我希望为其添加用户名或显示名称,但我无法这样做。我尝试了几件事,但仍然没有结果。请帮助我。我需要这个功能来本周提交项目。

【问题讨论】:

  • 使用 FirebaseAuth 无法做到这一点,如果必须存储用户详细信息,则需要使用 RealtimeDatabase 手动完成
  • @SakchhamSharma 有办法做到这一点,只是在创建新用户时不直接。请参阅下面的答案:)
  • @edant92 创建时的我ment

标签: android firebase firebase-authentication


【解决方案1】:

这肯定是可能的,但不是在用户创建方法中。

创建用户后(可能在addOnSuccessListener 中),您可以使用类似于以下代码的内容来更新用户显示名称:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder().setDisplayName("John Smith").build();

user.updateProfile(profileUpdates);

希望这会有所帮助!

编辑:我之前说过将代码添加到 AuthStateListener,但是,弗兰克在下面将其放入 addOnSuccessListener 的建议更好/更有意义,因此我更新了答案以反映这一点。

【讨论】:

  • 好答案!我可能会在addOnSuccessListener 中执行此操作,因为您通常只想在创建帐户时设置名称。
【解决方案2】:

我最近刚刚针对我自己的实现(SDK 版本 4.4.1)调查了这个问题。我发现如果您确定使用来自注册/登录的完全相同的 task.result 对象而不是来自默认实例的对象,它会完美运行。

另一个对我有帮助的解决方法是在您的 FB DB 中有一个电子邮件参考表,如下所示:

{ "EmailRef": { "username1" : "email@ domain .com"}, {"username2" : "email2@domain.com"} }

然后使用这样的方法通过用户的电子邮件(来自auth.CurrentUser.Email)查询用户名:

public static void GetCurrentUserName(Firebase.Auth.FirebaseUser user)
{
    string message = "";
    DatabaseReference dbRef = FbDbConnection();
    FirebaseDatabase.DefaultInstance.GetReference("EmailRef").OrderByValue().EqualTo(user.Email).GetValueAsync().ContinueWith(task =>
    {
        if (task.IsFaulted)
        {
            message = "GetCurrentUserName encountered an error: " + task.Exception;
            ModalManager.BuildFireBaseDebugModal(message);
            Debug.LogError(message);
            return;
        }
        if (task.IsCanceled)
        {
            message = "GetCurrentUserName was canceled.";
            Debug.LogError(message);
            return;
        }
        if (task.IsCompleted)
        {
            foreach (DataSnapshot ss in task.Result.Children.AsEnumerable())
            {
                try
                {
                    if (ss.Value != null)
                    {
                        if (ss.Value.ToString() == user.Email)
                        {
                            message = "GetCurrentUserName was successful -- Email: " + user.Email + " Username: " + user.DisplayName;
                            Debug.LogError(message);
                        }
                    }
                    return;
                }
                catch (Exception ex)
                {
                    message = "GetCurrentUserName Exception: " + ex;
                    Debug.LogError(message);
                    return;
                }
            }
        }

    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2013-07-11
    • 2019-07-13
    • 2016-10-13
    • 2018-11-11
    • 2017-05-14
    相关资源
    最近更新 更多