如何在Firebase中添加带有电子邮件+密码身份验证的DisplayName? Android的

时间:2016-10-01 09:12:18

标签: android firebase firebase-authentication

http://localhost:8983/solr/test-data/select?q=test_field:*test*&wt=json&indent=true

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

user.updateProfile(profileUpdates);

希望这有帮助!

编辑:我之前曾说过要将代码添加到AuthStateListener中,但是,Frank下面的建议将它放在addOnSuccessListener中更好/更有意义所以我更新了答案以反映这一点。

答案 1 :(得分:0)

我最近刚刚为自己的实现调查了这个问题(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;
                }
            }
        }

    });
}