为什么我看不到这个用户的用户名?

Why cant I see the username of this user?

我正在使用 Firebase 通过电子邮件和密码进行用户身份验证,我想从 authData 检索用户的用户名,但我只看到 uid。我想检索用户名,以便可以在另一个 activity 上显示它。

这是我的代码:

      button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ref.authWithPassword(email.getText().toString(), password.getText().toString(), new Firebase.AuthResultHandler() {
                @Override
                public void onAuthenticated(AuthData authData) {
                    setContentView(R.layout.activity_user_display);
                    Map<String, String> map = new HashMap<String, String>();
                    map.put("provider", authData.getProvider());
                    if(authData.getProviderData().containsKey("displayName")){
                        map.put("displayName", authData.getProviderData().get("displayName").toString());
                    }
                    else
                    {
                        Context c = getApplicationContext();
                        Toast t = Toast.makeText(c, "You thought you had it", Toast.LENGTH_SHORT);
                    }
                    ref.child("users").child(authData.getUid()).setValue(map);

                }

                @Override
                public void onAuthenticationError(FirebaseError firebaseError) {
                    Context c = getApplicationContext();
                    Toast error = Toast.makeText(c,"Sorry :)",Toast.LENGTH_SHORT);
                }
            });
        }
    });`

结果是上面代码的结果:

谢谢。

或许,您应该创建一个单独的数据库来存储客户的用户名。由于 uid 存储了该特定客户端的所有信息,您可能需要一个单独的数据库。

这可能对您有帮助:

About Authentication using email

About Auth() Variable

Similar Question for retrieving email in FireBase

希望对你有所帮助。

当您使用电子邮件和密码身份验证时,Firebase 只需要一个电子邮件地址和相应的密码来对用户进行身份验证。与社交提供商(Google、Facebook、Twitter、Github)不同,Firebase 在底层提供商中没有查找其他字段。请参阅 properties that are available in authData for the email+password provider.

的文档

您可以轻松地将 displayName 字段添加到您的 sign-up 表单,但您必须自己跟踪并使用不同的代码路径将其存储在数据库中。例如

Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.createUser(email.getText().toString(), password.getText().toString(), new Firebase.ValueResultHandler<Map<String, Object>>() {
    @Override
    public void onSuccess(Map<String, Object> result) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("provider", authData.getProvider());
        if(authData.getProviderData().containsKey("displayName")){
            map.put("displayName", authData.getProviderData().get("displayName").toString());
        }
        else {
            // read the display name from the text field
            map.put("displayName", displayName.getText().toString);
        }
        ref.child("users").child(authData.getUid()).setValue(map);
    }
    @Override
    public void onError(FirebaseError firebaseError) {
        // there was an error
    }
});

然后在您的 sign-in 流程中,确保不要使用 updateChildren()

覆盖显示名称
      button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ref.authWithPassword(email.getText().toString(), password.getText().toString(), new Firebase.AuthResultHandler() {
                @Override
                public void onAuthenticated(AuthData authData) {
                    setContentView(R.layout.activity_user_display);
                    Map<String, String> map = new HashMap<String, String>();
                    map.put("provider", authData.getProvider());
                    if(authData.getProviderData().containsKey("displayName")){
                        map.put("displayName", authData.getProviderData().get("displayName").toString());
                    }

                    ref.child("users").child(authData.getUid()).updateChildren(map);

                }