也许Firebase给了我足够的绳子来吊死自己。
通过提供的电子邮件和密码创建用户时,我还可以提供user_id。
伟大。由于数据库中的大多数主键都是 uuid/guid,因此我认为将用户表中的user_id设为 uuid pk 会很膨胀。
这奏效了。
直到我让用户通过第三方进行身份验证。Firebase回来了,创造了我可爱的用户。使用 Firebase UserId。
这不是一个uuid。
现在,我发现自己正在考虑将数据库中的userId字段重新设计回文本类型,因为Firebase UserId不是uuid。
有没有办法告诉Firebase将所有user_id值都设置为guid?我已经戳了一下,但是在使用OAuth2告诉Firebase时,我没有看到选项,"当你带着用户回来时,请把它user_id成uuid/guid,请......">
编辑:也许我不清楚。我曾经/现在使用 Firebase UID 作为我的 pk,而不是用户的电子邮件地址。但是,如果我只能在提供电子邮件/pwd 来创建用户时(而不是通过第三方 OAuth2 进行身份验证时(控制该 UID 的值/格式,那么我就无法假设我的首选格式。
第2次编辑:
通过电子邮件/pwd 创建用户时,我会通过 Firebase 管理员 SDK 进行创建。浏览器将电子邮件/pwd 传递给 API,API 创建用户 - 完全控制 UID。
private async Task<UserRecord> AddFirebaseLogin(UserForCreation userForCreation)
{
UserRecordArgs args = new UserRecordArgs()
{
Uid = Guid.NewGuid().ToString(),
...
但是,当浏览器重定向到第三方OAuth时,UID已经在身份验证令牌中返回,我想我已经错过了说出我希望该UID采用哪种格式的机会。
let provider = new firebase.auth.OAuthProvider('microsoft.com');
...
return this.afAuth.auth
.signInWithPopup(provider)
.then((res) => {
this.ngZone.run(() => {
const userData = {
uid: res.user.uid,
...
我认为,如果在任何其他身份验证方法中没有这种级别的控制,那么在一种情况下直接创建用户时,拥有设置 UID 的权限价值不大。
当我使用电子邮件/pwd 自己创建用户时,当我使用自由运行时,我所做的只是为自己制造心痛。
也许我错过了什么。
无法控制来自 Firebase 身份验证的 UID 的内容或格式。 它生成唯一的字符串,它们需要按原样被接受。 您可以确保它们在项目中是唯一的,并且可以安全地用作数据库中的主键。