我有一个 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))
)
}
}, [])
...
您不需要检查新用户的 UID 是否存在,因为它们对于每个用户都是唯一的……当然,如果您使用 Firebase Auth 来处理身份验证和用户创建。
对于创建的每个新用户(即使它是由 google、github、facebook... 身份验证创建的),您将获得一个 firebase auth UID,您可以将其用作用户的文档 ID,然后如果需要,在用户登录后只需检查用户的UID 文档已经存在,这是一项非常快的任务。
您也不需要在创建/编辑用户帐户时检查用户电子邮件/手机是否存在,但您需要在执行此操作时处理错误,因为如果电子邮件已被占用,Firebase 身份验证将返回error