当我使用FB Auth提供的功能注册新用户时出现问题。
当我注册一个新用户时,它会触发观察者 onAuthStateChanged,我认为它只会在用户登录时触发。
//user register
btnReg.addEventListener('click', e => {
e.preventDefault();
console.log('creating account');
auth.
createUserWithEmailAndPassword(regmail.value,regpass.value)
.then(userCredential => {
regform.reset();
console.log('successfully registered');
})
});
//user login
btnLogin.addEventListener('click', e => {
e.preventDefault();
console.log('trying to sign in');
auth.
signInWithEmailAndPassword(logmail.value,logpassw.value)
.then(userCredential => {
console.log('logged in');
signout.style.display = 'block';
logform.reset();
})
});
//check user state
auth.onAuthStateChanged(user => {
if (user) {
console.log('auth: logged in');
signout.style.display = 'block';
wheader.appendChild(signout)
}
});
答案 0 :(得分:0)
Firebase 身份验证就是这样工作的。如果您不希望出现这种行为,您可以在登录后立即注销用户。
const authListener = auth.onAuthStateChanged(user => {
if (user) {
console.log('auth: logged in');
signout.style.display = 'block';
wheader.appendChild(signout)
}
});
//When user clicks register,
authListener()
auth.signInWithEmailAndPassword(logmail.value,logpassw.value).then(userCredential => {
auth.signOut().then(() => {
// redirect somewhere
})
})
您可能不希望在此期间触发 authStateChanged 侦听器,因此当用户单击注册按钮时,禁用 auth 侦听器,如上所示。
其他方式是在云函数或您的服务器中使用 Firebase Admin SDK 创建用户帐户。您可以在文档中阅读有关[创建新用户]https://firebase.google.com/docs/auth/admin/manage-users#create_a_user() 的更多信息。但如果立即注销对您有用,那么就不需要云功能。