firebase - 使用用户名作为 firebase 中的 key 来存储用户

标签 firebase firebase-realtime-database firebase-authentication

我想要一个用户名/密码登录系统,而不是电子邮件/密码。我目前正在做的是获取用户名并在末尾附加“@domain.com”,然后在 firebase 上将用户注册为电子邮件/密码帐户。

在我的 Firebase 数据库中,我将用户信息存储在“userProfiles/$uid”下。但是,如果只给出用户的用户名,我需要首先访问另一个节点来查找 uid,然后使用它来访问用户数据。

我的问题是:仅在每个用户名下存储用户数据有什么缺点吗?在我的安全规则中,我可以这样做:

$username + '@domain.com' === auth.token.email

大多数时候,我可以直接访问用户的 uid。但是,在某些情况下,我想重置用户的密码(我必须自己实现它,因为我在 firebase 中使用用户名作为电子邮件),并且我只能访问用户名。

最佳答案

更新

正如评论中所指出的,由于用户是使用用户名 + '@domain.com' 进行注册的,Firebase 将防止重复的用户名,因为它不允许两个单独的用户使用同一个电子邮件。创建用户后,您可以将用户名写入数据库,并且不会发生任何冲突。请记住,如果允许用户更改其用户名,这个问题可能会变得更加困难。您必须对照现有用户名检查新请求的用户名,以确定请求的名称是否已存在。最后,不要忘记 Firebase 区分大小写,因此您可能需要将所有用户名转换为小写/大写,并在上传之前修剪尾部空格。

我能想到的最大问题是 Firebase 保证 uid 是唯一的,因此不能有任何重复。如果您按用户名存储所有内容,则必须确保用户注册时没有重复的用户名。因此,您必须创建一个可供未经身份验证的用户读取的数据库区域,以根据现有用户名检查请求的用户名。

大多数时候您必须考虑如何访问数据。此外,如果您对用户数据进行非规范化(将其存储在 uid 和用户名下),您必须确保两个副本保持同步。仅存储 username -> uid 可能更容易,这样如果您只有用户名,您就可以通过映射来获取用户数据。这种情况不会经常发生,而且额外的嵌套查询不会对性能产生太大影响。

关于firebase - 使用用户名作为 firebase 中的 key 来存储用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46159900/

相关文章:

ios - 为什么在 iOS 11.4 版本中无法获取设备 token 值和 FCM token 值?

android - 以编程方式(而非手动)将 JSON 导入实时数据库

firebase - Firebase 的云函数 : How to get event. data.ref.parent.child ("xxx").val?

java - Firebase Java Admin SDK 初学者(从 SQL)

ios - Firebase 匿名登录 - 为什么 FirebaseID 在登录到 Facebook 时发生变化,但在未登录到 Facebook 时保持不变?

javascript - 使用 ReactJS 和 Firebase 进行身份验证

javascript - Firebase:在成功回调中使用新创建的 key

ios - 根据(城市)从 firebase 检索数据

android - 如何在 firebase 中创建关系数据库?

android - UserProfileChangeRequest setPhotoUri - 它是如何完成的?