在 Android 应用中使用 Firebase (BaaS) 存储电子邮件和密码时如何包含用户名?
Posted
技术标签:
【中文标题】在 Android 应用中使用 Firebase (BaaS) 存储电子邮件和密码时如何包含用户名?【英文标题】:How do you include a username when storing email and password using Firebase (BaaS) in an Android app? 【发布时间】:2015-11-16 00:56:56 【问题描述】:Firebase createUser()
方法采用电子邮件和密码字段,但如果我还想允许用户使用类似于 Snapchat、Instagram、*** 等的自定义用户名怎么办?有什么方法可以修改现有方法以也接受该字段,或者我是否需要手动推送和管理此信息,如果需要如何?
这是我第一次尝试存储所需的用户信息:
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'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 文档中storing user data 上的此页面。
【讨论】:
抱歉回复晚了。这似乎适用于 javascript。我需要为 android 开发 Java。每个人的设置似乎略有不同,我在翻译时遇到了麻烦。 当然。 编辑您的问题以包含您尽最大努力的代码,我会看看。 会的!我非常感谢您愿意提供帮助!首先快速提问:users
父对象和authData.uid
对象...您是否必须手动将它们写入数据库,还是在使用 createUser 时自动创建?它们没有出现在我的 firebase 仪表板中,而且我已经对一些伪用户进行了身份验证。出于用户隐私目的,这些对象是否被隐藏或无法访问?
代码是JavaScript,应该是Java!
如果用户的连接在创建帐户之后但在设置用户名之前断开,这不会导致问题吗?【参考方案2】:
是的,有一种方法可以在 Firebase 中更新用户信息。 您所需要的一切 - 阅读 Firebase 文档中的这篇文章并实施此处描述的方法Update user info
使用此方法可以更新 FirabaseUser 对象的 diplayName 属性。只需为 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);
试试这个实现并执行...谢谢
希望您了解如何在 firebase 中更改(创建)具有必填字段的表。
Related question & discussion with solutions
【讨论】:
以上是关于在 Android 应用中使用 Firebase (BaaS) 存储电子邮件和密码时如何包含用户名?的主要内容,如果未能解决你的问题,请参考以下文章
无法将 Firebase 连接到 Android 应用 |此应用无权使用 Firebase 身份验证
在android中使用firebase电话身份验证时应用程序崩溃
我是不是需要 Firebase 才能在我的 Android 应用中使用 Google 登录? [复制]
在 Android 中使用 Redux 结构和 Firebase
可以在firebase中的ios和android项目之间共享用户进行身份验证
GoogleSignInResult 在使用 Firebase 的 Android 应用程序中返回 DEVELOPER_ERROR