31

FirebasecreateUser()方法需要一个电子邮件和密码字段,但如果我还想允许用户使用类似于 Snapchat、Instagram、StackOverflow 等的自定义用户名怎么办?有什么方法可以修改现有方法以也接受该字段,或者我是否需要手动推送和管理此信息,如果需要如何?

这是我第一次尝试存储所需的用户信息:

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()orpush()方法以便条目不会被覆盖?

这是我的第二次尝试:

  @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);
4

3 回答 3

19

显示一个包含三个字段的表单:

  1. 用户名
  2. 电子邮件地址
  3. 密码

将后两者发送到 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's 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 文档中存储用户数据的页面。

于 2015-08-22T01:19:34.583 回答
16

是的,有一种方法可以在 Firebase 中更新用户信息。您所需要的一切 - 阅读 Firebase 文档中的这篇文章并实施此处描述的方法更新用户信息

使用此方法,您可以更新 FirabaseUser 对象的 diplayName 属性。只需为 displayName 属性设置用户名并提交您的更改。

我希望这能帮到您。

于 2016-06-29T20:16:22.317 回答
0

这是将注册详细信息存储在数据库中的一种方法,

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);

试试这个实现并执行......谢谢

希望您了解如何在 firebase 中更改(创建)具有必填字段的表。

相关问题和讨论与解决方案

于 2017-05-31T12:32:09.700 回答