在 AngularFire2 身份验证中使用提供者 UID 作为 Firestore ID

Using provider UID as Firestore ID in AngularFire2 auth

我想添加 Google、Facebook 和自定义登录到我的 Angular7 网络应用程序。

每个供应商给的UID标识符是唯一的吗?我的意思是,我可以将它用作我的用户 Firestore 集合中的用户 ID 吗?

如果是这样,我是否仍可以使用 createId() 方法在我的自定义登录中自行生成此 ID?或者它可能与提供者 UID 之一相同?

是的,您可以将其用作用户集合中的 UID。

这是我的身份验证流程:

1/ 用户使用 email/password

创建了一个新帐户
async signUpWithPassword(email, password) {
  await firebase.auth().createUserWithEmailAndPassword(email, password)
  // user created!
}

2/ 我 运行 一个带有 auth 的 onCreate 触发器的云函数,用于将用户保存到我的集合中:

export const createUserProfile = functions.auth
  .user()
  .onCreate((user: admin.auth.UserRecord) => {
     const { uid } = user
     const userRef = db.doc(`users/${uid}`)
     // Save it to firestore
     return userRef.set({ points: 200 })
})

3/ 如果此用户尝试向另一个提供商注册(Google/Facebook 等),我会检测他是否使用相同的电子邮件地址,如果是,我会 link 将新的提供商注册到当前一个通过帐户 linking:

https://firebase.google.com/docs/auth/web/account-linking

这样一来,用户将有多个身份验证提供程序附加到一个唯一的 UID/profile。