我应该在哪里“合并”Firebase Auth 和 Firebase Firestore 用户数据?

问题描述 投票:0回答:1

我有一个 NextJS 网络应用程序,用户可以在其中登录并执行典型的电子商务任务,例如编辑他们的电子邮件、姓名、偏好等

目前用户可以使用他们的电子邮件或谷歌帐户登录,如下所述:https://firebase.google.com/docs/auth/web/firebaseui

在用户通过电子邮件或 Google 帐户成功验证后,我在帐户创建上有一个步骤,代码将在 Firestore 中查找现有用户对象以查看现有帐户是否已存在。

这现在工作正常,但我注意到当新用户创建他们的帐户时有些缓慢,我怀疑原因是正在进行的检查。

这是我的第一个电子商务网站,我想知道最好的方法是什么。我正在考虑将检查这个动作转移到 Next API 中间件,但我想我会先在这里问一下这是否值得做。

以下是登录页面的代码。

... 
export default function Login() {
  const router: NextRouter = useRouter()
  const user = useAuthContext()

  const { profile, setProfile } = useProfileContext()

  const uiConfig = {
    signInOptions: [
      GoogleAuthProvider.PROVIDER_ID,
      EmailAuthProvider.PROVIDER_ID,
    ],
    signInSuccessUrl: "/account",  # Reroute to user account dashboard 
  }

  useMemo(() => {
    if (user && !profile) {
      uidProfileExists(user.uid)
        .then((exists: boolean) => {
          if (!exists) {
            // This will create a new profile as recognized by the Firebase
            // database.  A user login profile may already exist through
            // Gmail, GitHub, or some authentication provider.
            createNewUserProfile(user)
          }
        })
        .then(() =>
          getUserProfile(user.uid).then((profileData) => setProfile(profileData))
        )
    }
  }, [])
... 
firebase next.js firebase-authentication
1个回答
0
投票

您不需要检查新用户的 UID 是否存在,因为它们对于每个用户都是唯一的……当然,如果您使用 Firebase Auth 来处理身份验证和用户创建。

对于创建的每个新用户(即使它是由 google、github、facebook... 身份验证创建的),您将获得一个 firebase auth UID,您可以将其用作用户的文档 ID,然后如果需要,在用户登录后只需检查用户的UID 文档已经存在,这是一项非常快的任务。

您也不需要在创建/编辑用户帐户时检查用户电子邮件/手机是否存在,但您需要在执行此操作时处理错误,因为如果电子邮件已被占用,Firebase 身份验证将返回error

© www.soinside.com 2019 - 2024. All rights reserved.