Как вы включаете имя пользователя при хранении электронной почты и пароля с помощью Firebase (BaaS) в приложении для Android?
Метод Firebase createUser()
принимает поле электронной почты и пароля, но что, если я хочу также разрешить пользователю пользовательское имя пользователя, подобное Snapchat, Instagram, StackOverflow и т.д.? Есть ли способ изменить существующий метод, чтобы принять это поле, или мне нужно делать push и управлять этой информацией вручную, и если да, то каким образом?
Это моя первая попытка сохранить желаемую информацию пользователя:
Firebase ref = new Firebase(firebaseURL);
ref.createUser(email, password, new Firebase.ValueResultHandler<Map<String, Object>>() {
@Override
public void onSuccess(Map<String, Object> result) {
System.out.println("Successfully created user account with uid: " + result.get("uid"));
//Sign user in
Firebase ref = new Firebase(firebaseURL);
ref.authWithPassword(email, password, new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());
//Save user info
Firebase userRef = new Firebase(firebaseURL + "Users/");
User user = new User(username, authData.getUid());
userRef.setValue(user);
Это хорошая практика? Я полагал, что сохранение UID с именем пользователя может помочь мне в будущих изменениях обработки и т.д. Также следует ли использовать метод updateChildren()
или push()
, чтобы записи не перезаписывались, если это приложение для социальных сетей?
Это моя вторая попытка:
@Override
public void onAuthenticated(AuthData authData) {
System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());
//Save user info and username
Firebase ref = new Firebase(firebaseURL);
Map<String, String> map = new HashMap<String, String>();
map.put("email", email);
map.put("username", username);
map.put("provider", authData.getProvider());
ref.child("users").child(authData.getUid()).setValue(map);
Ответы
Ответ 1
Показать форму с тремя полями:
- Имя пользователя
- Адрес электронной почты
- Пароль
Отправьте два последних метода Firebase createUser()
. Затем в ответном завершении завершения храните всю информацию в базе данных Firebase.
var userName, emailAddress, password;
// TODO: read these values from a form where the user entered them
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.createUser({
email : emailAddress,
password : password
}, function(error, authData) {
if (error) {
console.log("Error creating user:", error);
} else {
// save the user profile into the database so we can list users,
// use them in Security and Firebase Rules, and show profiles
ref.child("users").child(authData.uid).set({
provider: authData.provider,
name: userName
});
}
});
Дополнительную информацию см. на странице сохранение пользовательских данных в документах Firebase.
Ответ 2
Да, есть способ обновить информацию о пользователе в Firebase.
Все, что вам нужно - прочитать эту статью в документах Firebase и реализовать описанный здесь метод Обновить информацию о пользователе
С помощью этого метода вы можете обновить свойство diplayName объекта FirabaseUser. Просто укажите имя пользователя для свойства displayName и внесите изменения.
Надеюсь, это поможет вам.
Ответ 3
Вот один из способов хранения зарегистрированных данных в базе данных,
Map<String, String> parameters = new HashMap<>();
FirebaseDatabase mFirebaseInstance;
parameters.put(Constant.TAG_USER, strUsrS.trim());
parameters.put(Constant.TAG_EMAIL, strEmailS.trim());
parameters.put(Constant.TAG_PASS, strPassS.trim());
//use this if needed(pushId)
String pushId = mFirebaseInstance.getReference(YOUR TABLE NAME).getRef().push().getKey();
parameters.put(Constant.TAG_KEY, pushId.trim());
mFirebaseInstance.getReference(YOUR TABLE NAME).getRef().child(strUsrS.trim()).setValue(parameters);
Попробуйте эту реализацию и выполните... Thankyou
Надеюсь, что вам известно о том, как изменить (создать) таблицу с обязательными полями в firebase.
Связанный вопрос и обсуждение с решениями