使用电子邮件创建用户后如何在 firebase 中注销用户?
How to sign out user in firebase after creating user with email?
在我的应用程序中,我想在使用电子邮件创建用户后注销用户以验证他的电子邮件。我尝试了不同的方法,但它们都不起作用。这是我的代码:
try {
await app
.auth()
.createUserWithEmailAndPassword(email.value, password.value)
.then((userCredential)=>{
// send verification mail.
userCredential.user.sendEmailVerification();
alert("Email sent");
})
.catch(alert);
//history.push("/");
} catch (error) {
alert(error);
}
我已经从另一个组件导入了 firebase initalizer:
import firebase from "firebase/app";
import "firebase/auth";
const app = firebase.initializeApp({
apiKey: process.env.REACT_APP_FIREBASE_KEY,
authDomain: process.env.REACT_APP_FIREBASE_DOMAIN,
databaseURL: process.env.REACT_APP_FIREBASE_DATABASE,
projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.REACT_APP_FIREBASE_SENDER_ID,
appId: process.env.REACT_APP_FIREBASE_APP_ID,
});
export default app;
这是我的 authcontext:
useEffect(() => {
app.auth().onAuthStateChanged((user) => {
setCurrentUser(user);
setPending(false);
});
}, []);
if (pending) {
return <>Loading...</>;
}
return (
<AuthContext.Provider
value={{
currentUser,
}}
>
{children}
</AuthContext.Provider>
);
};
对此有什么想法吗?
您可以尝试使用signOut
方法注销用户:
// unsubscribe Auth listener here
return app.auth()
.createUserWithEmailAndPassword(email.value, password.value)
.then(async (userCredential)=>{
// send verification mail.
await userCredential.user.sendEmailVerification();
await app.auth().signOut();
alert("Email sent");
})
虽然如果用户的电子邮件未经过验证,您不需要注销用户(取决于您希望应用程序如何工作,但只是一个注释)。
您可以简单地检查电子邮件是否经过验证,如果没有则提示用户进行验证,否则不允许他们使用该应用程序。
User 对象有一个 属性 电子邮件已验证:
if (!app.auth().currentUser.emailVerified) {
alert("Please verify the email")
}
您还可以检查邮箱是否通过安全规则验证:
match /{document=**} {
allow read, write: if request.auth != null && request.auth.token.email_verified;
}
在我的应用程序中,我想在使用电子邮件创建用户后注销用户以验证他的电子邮件。我尝试了不同的方法,但它们都不起作用。这是我的代码:
try {
await app
.auth()
.createUserWithEmailAndPassword(email.value, password.value)
.then((userCredential)=>{
// send verification mail.
userCredential.user.sendEmailVerification();
alert("Email sent");
})
.catch(alert);
//history.push("/");
} catch (error) {
alert(error);
}
我已经从另一个组件导入了 firebase initalizer:
import firebase from "firebase/app";
import "firebase/auth";
const app = firebase.initializeApp({
apiKey: process.env.REACT_APP_FIREBASE_KEY,
authDomain: process.env.REACT_APP_FIREBASE_DOMAIN,
databaseURL: process.env.REACT_APP_FIREBASE_DATABASE,
projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.REACT_APP_FIREBASE_SENDER_ID,
appId: process.env.REACT_APP_FIREBASE_APP_ID,
});
export default app;
这是我的 authcontext:
useEffect(() => {
app.auth().onAuthStateChanged((user) => {
setCurrentUser(user);
setPending(false);
});
}, []);
if (pending) {
return <>Loading...</>;
}
return (
<AuthContext.Provider
value={{
currentUser,
}}
>
{children}
</AuthContext.Provider>
);
};
对此有什么想法吗?
您可以尝试使用signOut
方法注销用户:
// unsubscribe Auth listener here
return app.auth()
.createUserWithEmailAndPassword(email.value, password.value)
.then(async (userCredential)=>{
// send verification mail.
await userCredential.user.sendEmailVerification();
await app.auth().signOut();
alert("Email sent");
})
虽然如果用户的电子邮件未经过验证,您不需要注销用户(取决于您希望应用程序如何工作,但只是一个注释)。 您可以简单地检查电子邮件是否经过验证,如果没有则提示用户进行验证,否则不允许他们使用该应用程序。
User 对象有一个 属性 电子邮件已验证:
if (!app.auth().currentUser.emailVerified) {
alert("Please verify the email")
}
您还可以检查邮箱是否通过安全规则验证:
match /{document=**} {
allow read, write: if request.auth != null && request.auth.token.email_verified;
}