2016-01-01 3 views
1

Я использую 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<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); 
       } 
      }); 
     } 
    });` 

и результат это результат из приведенного выше кода:

this is the result of the code from above

Спасибо.

ответ

2

Возможно, вам необходимо создать отдельную БД для хранения имени пользователя. Поскольку uid хранит всю информацию этого конкретного клиента, вам, вероятно, нужна отдельная БД.

Это может помочь вам:

About Authentication using email

About Auth() Variable

Similar Question for retrieving email in FireBase

Надеется, что это помогло вам.

1

При использовании электронной почты & аутентификации пароля Firebase требует только адрес электронной почты и соответствующий пароль для аутентификации пользователя. В отличие от социальных поставщиков (Google, Facebook, Twitter, Github), нет дополнительных полей, которые Firebase просматривает в базовом провайдере. См. Документацию для properties that are available in authData for the email+password provider.

Вы можете легко добавить поле 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>>() { 
    @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 
    } 
}); 

Затем в знак в потоке, просто убедитесь, что не перезаписывать DISPLAYNAME с помощью 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); 

       } 
+0

Спасибо за ответ на мой вопрос. По моему мнению, 'AuthData' возвращается при входе в систему, поэтому как методы для' AuthData' работают без объекта 'AuthData', возвращаемого в процессе регистрации? – user2533416