使用电子邮件创建用户后如何在 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;
}