如何使用 Firebase 为新用户创建自定义 URL?
How to create custom URLs for new users using Firebase?
我有一个 React/Redux 应用程序,它在 Firebase 下创建新用户并将其保存为 /users/<uid>
但是,我还想让每个用户的个人资料页面都有一个自定义 URL,例如 domain.com/users/john-david
或 domain.com/users/john-david-1343
(如果原来的 /users/john-david
已经拍摄。)
最好的方法是什么?
我的问题是我打算在 Firebase 中将用户存储在 /users/<firstname-lastname-hash>
下,但是将它们存储在除 uid 之外的任何东西下似乎不是一个好主意(这是真的吗?)。
而且,如果我不这样做,那么我如何在 Firebase 中维护 /users/<uid>
,同时创建新的用户名以解决重复问题,并在访问时搜索用户是否存在 domain.com/users/john-david-123
这是新用户保存到 Firebase 的一些示例代码
export function saveUser (data, user) {
let username = data.username
return ref.child(`users/${user.uid}/info`)
.set({
email: user.email,
firstname: data.firstName,
lastname: data.lastName,
admin: false,
// for /users/<username>
username: username,
uid: user.uid
})
.then(() => user)
}
一般来说,我们说您应该按照您打算如何查看数据的方式将数据存储在 Firebase 中,没有理由特别要求您在存储时必须使用 UID 作为主键用户。您可能想要的是:
- 如您所述,将用户数据存储在
/users/${username}
中,包括一个 uid
字段。
- 当用户注册时,生成
firstname-lastname
slug 并存储在 /uids/${uid} = username
.
这样你就有了一个简单的方法来从 UID 映射到用户,反之亦然。这里的缺点是,一旦您将用户名写入数据结构,您可能永远不应该让他们更改用户名。
或者,您可以撤销我的建议并存储 /usernames/${username} = uid
和 /users/${uid}
。这使得重命名用户名变得更容易,但需要您进行额外的查找才能从用户名转到数据。
我有一个 React/Redux 应用程序,它在 Firebase 下创建新用户并将其保存为 /users/<uid>
但是,我还想让每个用户的个人资料页面都有一个自定义 URL,例如 domain.com/users/john-david
或 domain.com/users/john-david-1343
(如果原来的 /users/john-david
已经拍摄。)
最好的方法是什么?
我的问题是我打算在 Firebase 中将用户存储在 /users/<firstname-lastname-hash>
下,但是将它们存储在除 uid 之外的任何东西下似乎不是一个好主意(这是真的吗?)。
而且,如果我不这样做,那么我如何在 Firebase 中维护 /users/<uid>
,同时创建新的用户名以解决重复问题,并在访问时搜索用户是否存在 domain.com/users/john-david-123
这是新用户保存到 Firebase 的一些示例代码
export function saveUser (data, user) {
let username = data.username
return ref.child(`users/${user.uid}/info`)
.set({
email: user.email,
firstname: data.firstName,
lastname: data.lastName,
admin: false,
// for /users/<username>
username: username,
uid: user.uid
})
.then(() => user)
}
一般来说,我们说您应该按照您打算如何查看数据的方式将数据存储在 Firebase 中,没有理由特别要求您在存储时必须使用 UID 作为主键用户。您可能想要的是:
- 如您所述,将用户数据存储在
/users/${username}
中,包括一个uid
字段。 - 当用户注册时,生成
firstname-lastname
slug 并存储在/uids/${uid} = username
.
这样你就有了一个简单的方法来从 UID 映射到用户,反之亦然。这里的缺点是,一旦您将用户名写入数据结构,您可能永远不应该让他们更改用户名。
或者,您可以撤销我的建议并存储 /usernames/${username} = uid
和 /users/${uid}
。这使得重命名用户名变得更容易,但需要您进行额外的查找才能从用户名转到数据。