我有一个React应用程序使用firebase认证。
用户登录后,它会将用户重定向到books页面。
import { auth, firebase } from "./firebase";
async function googleLogin() {
const provider = new firebase.auth.GoogleAuthProvider();
await auth.signInWithPopup(provider).then(
async (result) => {
const token = await auth?.currentUser?.getIdToken(true);
if (token) {
localStorage.setItem("@token", token);
navigate("/book-list");
}
},
function (error) {
console.log(error);
}
);
}
然后在books页面中,我尝试获取currentUser
以便调用getIdToken()
,但currentUser
返回null。
import { auth } from "./firebase";
const currentUser = auth.currentUser
下面是firebase.js文件:
import firebase from 'firebase/compat/app';
import 'firebase/compat/auth';
import 'firebase/compat/firestore';
const firebaseConfig = {...};
firebase.initializeApp(firebaseConfig);
const auth = firebase.auth();
export { auth, firebase };
如何在用户登录后从另一个文件调用currentUser
?
1条答案
按热度按时间fivyi3re1#
这是预期的行为。由于books页面是一个新页面,Firebase SDK需要从本地存储中恢复身份验证状态,并在本地存储中自动保存。这需要它调用服务器,例如检查帐户是否已被禁用。由于我们无法阻止页面加载,您的主代码继续执行,并看到
currentUser
为空。您需要做的是 * 侦听用户的身份验证状态 *,如获取当前用户的文档中的第一个片段所示:
当用户会话恢复、失败、没有登录用户或身份验证状态发生更改时,此回调将自动触发,因此,它是更新应用程序以获得最新身份验证状态的理想位置。