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

7 浏览
0 Comments

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

我正在使用Firebase进行通过电子邮件和密码进行用户身份验证,并且我想从authData中获取用户的用户名,但我只看到uid。我想要获取用户名,以便我可以在另一个活动中显示它。

这是我的代码:

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 map = new HashMap();
                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);
            }
        });
    }
});

结果是上面代码的结果:

[结果图片](https://i.stack.imgur.com/yt9Fo.png)

谢谢。

0
0 Comments

问题出现的原因是没有创建一个单独的数据库来存储用户的用户名。因为uid存储了特定客户端的所有信息,所以可能需要一个单独的数据库来存储用户名。

解决方法如下:

1. 创建一个单独的数据库来存储用户的用户名。

2. 参考以下链接了解如何使用电子邮件进行身份验证:关于使用电子邮件进行身份验证

3. 参考以下链接了解关于Auth()变量的相关信息:关于Auth()变量

4. 参考以下链接了解如何在Firebase中根据用户ID获取用户电子邮件的类似问题:在Firebase中根据用户ID获取用户电子邮件的类似问题

希望对你有帮助。

0
0 Comments

问题出现的原因是在使用email+password身份验证时,Firebase只需要电子邮件地址和相应的密码来验证用户,没有额外的字段用于查找底层提供者。因此,在注册过程中没有返回AuthData对象,所以无法使用AuthData对象的方法。

解决方法是,在注册表单中添加一个displayName字段,并在数据库中存储该字段。在注册过程中,可以使用以下代码将displayName存储到数据库中:

Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.createUser(email.getText().toString(), password.getText().toString(), new Firebase.ValueResultHandler<Map<String, Object>>() {
    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);
    }
    public void onError(FirebaseError firebaseError) {
        // there was an error
    }
});

然后,在登录流程中,使用updateChildren()方法来确保不覆盖displayName字段:

button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        ref.authWithPassword(email.getText().toString(), password.getText().toString(), new Firebase.AuthResultHandler() {
            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);
            }

通过以上方法,可以解决无法看到用户名的问题。

0