我有一个博客应用程序,用户可以注册并发布文章和评论。我需要帮助为以下内容找到一个好的应用程序工作流程:
一个新用户注册并输入他的电子邮件地址、密码和他想使用的唯一用户名。应用程序会检查用户名的有效性,如果用户名不存在,则会创建一个新的用户文档和一个新的用户名文档:
用户配置文件文档:
用户名文档:
创建用户名和用户文档(批写)后,我注销用户并向其发送电子邮件验证电子邮件。在验证电子邮件之前,他无法登录该网站。一旦他核实了电子邮件,他就可以登录到该网站。我现在通过 onAuthStateChanged
诸如此类的观察员: ~/plugins/auth.js
:
onAuthStateChanged(auth, (user) => {
if (user) {
store.dispatch('onAuthStateChangedAction', user)
} else {
store.dispatch('logOutUser')
}
})
在应用商店里,我有 onAuthStateChangedAction
像这样:
async onAuthStateChangedAction({ commit, dispatch }, authUser) {
const { displayName, email, emailVerified, photoURL, providerData, uid } =
authUser
commit('SET_AUTH_USER', {
displayName,
email,
emailVerified,
photoURL,
providerData,
uid
})
await dispatch('getUserProfile', authUser)
}
所以我得到了登录用户,但是当用户第一次登录时,设置用户配置文件的好方法是什么?一些用户是第一次登录,其他用户可能已经是现有用户,不需要重新创建他们的用户配置文件(如果没有必要,我试图阻止写入firestore)。
但是,如果他之前已经完全签约,就没有必要这么做。我只想抓住他的个人资料继续前进。
有什么东西我可以加进去吗 user
文档,以便我知道用户是全新的,尚未完全登录?
我的 getUserProfile
行动:
async getUserProfile({ commit, dispatch }, authUser) {
// if user logging in to the first time, add new fields, but if already existing user, just grab his user profile
updatedAt: serverTimestamp(),
emailVerified: authUser.emailVerified
}
也许有更好的方法来处理这个用例,或者有更简单的方法?谢谢你的评论和建议!
1条答案
按热度按时间0dxa2lsx1#
用户可能已经是现有用户,不需要重新创建其用户配置文件
您可以检查他们的文档是否已经创建。如果没有,请添加文档,否则继续。
另一种方法是使用
isNewUser
财产自additionalUserInfo
. 但如果您使用的是电子邮件密码验证,则createUserWithEmailAndPassword
方法将始终返回isNewUser
作为true
及signInWithEmailAndPassword
永远都会回来false
当用户在创建帐户时登录。因此,下次登录时,他们不再是新用户。此外,您可以使用安全规则确保仅在文档丢失时创建文档。