gpt4 book ai didi

javascript - Firebase Auth - createUserWithEmailAndPassword() - 在验证电子邮件之前阻止登录

转载 作者:行者123 更新时间:2023-12-03 00:10:27 25 4
gpt4 key购买 nike

我希望使用 createUserWithEmailAndPassword() 在 Firebase Auth 中创建用户帐户 - 无需登录用户。我希望用户首先验证电子邮件地址。直接登录用户会导致许多不需要的副作用。

/signup 页面包含以下代码 - 我希望用户在注册后停留在/signup 页面上,以便能够看到注册消息。

firebase.auth().createUserWithEmailAndPassword(data.email, data.password)
.then((user)=> {
//Send email verification link
user.sendEmailVerification()
//Show message - "Your account was created - please verify using link in email"
handleStatusMessage(AUTH_SUCCESS)
})
.catch((error)=>{...})

app.js 具有以下登录和重定向处理程序

//handle login and redirect
firebase.auth().onAuthStateChanged((user) => {
if (user) {
if(!user.emailVerified){
//Exit if email is not verified
console.log('auth.js exit')
//Line 7
}
store.dispatch(setInitialStore()).then(() => {
renderApp()
//Brings user to start page
if (history.location.pathname === '/login') {
history.push('/start')
}
})
} else {
renderApp()
//Brings user to /login or /verifyEmail page when logged out
if(!history.location.pathname.includes('/verifyEmail')){
history.push('/login')
}
}

我的问题是:

  1. 用户在成功注册后会被重定向,除非我在第 7 行取消执行

  2. 如果我在第 7 行取消执行,用户在离开/signup 时会被卡住

  3. 注销用户会导致 onAuthStateChanged() 触发两次 - 重定向用户

成功创建帐户后,如何让用户保留在/signup 页面上,同时仍允许用户导航到/login/verifyEmail 位置?最好处于注销状态。

最佳答案

我最终所做的是添加检查用户在注册期间登录和注销的时间。

signupPage.js

firebase.auth().createUserWithEmailAndPassword(data.email, data.password)
.then((user)=> {
//Login is triggered --> line 4 in app.js
user.sendEmailVerification() //Send email verification
handleStatusMessage(AUTH_SUCCESS) //Show success message
firebase.auth().signOut() //Logout is triggered --> line 16 in app.js
})
.catch((error)=>{ ... }

app.js

//handle login and redirect
firebase.auth().onAuthStateChanged((user) => {
if (user) {
//** line 4 ** EXIT if logged in from /signup
if(!isEmailVerified && history.location.pathname.includes('/signup')){
return
}
store.dispatch(setInitialStore()).then(() => {
renderApp()
//Brings user to start page
if (history.location.pathname === '/login') {
history.push('/start')
}
})
} else {
//** line 16 ** EXIT if logged out from /signup
if(history.location.pathname.includes('/signup')){
return
}
renderApp()
//Brings user to /login or /verifyEmail page when logged out
if(!history.location.pathname.includes('/verifyEmail')){
history.push('/login')
}
}

真的希望有一个选项createUserWithEmailAndPassword()能够自动发送电子邮件验证电子邮件并且登录用户避免这种猫捉老鼠的游戏代码。 :)

类似于createUserWithEmailAndPasswordEmailVerificationRequired()的单独方法,自动发送电子邮件链接并且不登录用户也可以工作;)

关于javascript - Firebase Auth - createUserWithEmailAndPassword() - 在验证电子邮件之前阻止登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57762736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com