google auth 和 firebase 持久性

google auth and firebase persistence

这是我的登录功能,它可以让您通过 google 帐户登录,但在刷新时它不会保持登录状态。我做错了什么?抱歉,我不知道如何格式化代码以在此处正确显示。

const provider = new GoogleAuthProvider();


const  login = () => 
{setPersistence(auth, browserSessionPersistence)
    .then(()=> {
        signInWithPopup(auth, provider)
    .then((result) => {

        const credential = GoogleAuthProvider.credentialFromResult(result);
        const token = credential?.accessToken;
        // The signed-in user info.
        const user = result.user;
        //console.log({ credentials, token,  user });
       
        
    })
    .then(() => {
      setSignIn(true);
      
    })
    .catch((error) => {
        // Handle Errors here.
        const errorCode = error.code;
        const errorMessage = error.message;
        // The email of the user's account used.
        const email = error.email;
        // The AuthCredential type that was used.
        const credential = GoogleAuthProvider.credentialFromError(error);
        //console.log({ errorCode, errorMessage, email, credential });
    });
   

})

};

当您重新启动应用程序时,Firebase 会自动恢复用户凭据,但您的代码仅响应显式登录 (signInWithPopup)。

要获取自动恢复(以及身份验证状态中的其他更改),您应该使用身份验证状态侦听器,如 getting the current user 文档中的第一个代码示例所示:

firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    // User is signed in, see docs for a list of available properties
    // https://firebase.google.com/docs/reference/js/firebase.User
    var uid = user.uid;
    // ...
  } else {
    // User is signed out
    // ...
  }
});

从 v9 开始,代码发生了变化。

import { getAuth, onAuthStateChanged } from "firebase/auth";

const auth = getAuth();
onAuthStateChanged(auth, (user) => {
  if (user) {
    // User is signed in, see docs for a list of available properties
    // https://firebase.google.com/docs/reference/js/firebase.User
    const uid = user.uid;
    // ...
  } else {
    // User is signed out
    // ...
  }
});