这是我的个人资料页面上的代码,当我从AuthService的登录方法重定向时,此方法第一次正常工作
const user = firebase.auth().currentUser;
if (user != null) {
this.name = user.displayName;
this.uid = user.uid;
} else {
this.name = "Unknown";
}
但是,如果我刷新页面或转到任何其他页面并返回此个人资料页面,则currentUser将为空。
这是我的身份验证服务代码。
import * as firebase from "firebase/app";
import { auth } from "firebase/app";
async googleSignin() {
firebase
.auth()
.setPersistence(firebase.auth.Auth.Persistence.LOCAL)
.then(async () => {
const provider = new auth.GoogleAuthProvider();
const credential = await this.afAuth.auth.signInWithPopup(provider);
this.updateUserData(credential.user);
this.router.navigate(["/profile"]);
return;
});
}
为什么我失去了currentUser?我什至还添加了Persistence.LOCAL。
答案 0 :(得分:2)
导航到新页面时,将重新加载Firebase身份验证SDK。此时,Firebase会自动刷新当前用户的身份验证状态,但这可能需要往返服务器。到您的firebase.auth()。currentUser运行时,显然还没有完成刷新。
因此,您应使用onAuthStateChange
来监听更改,如getting the currently signed in user上的文档所示:
firebase.auth().onAuthStateChanged(function(user) {
if (user != null) {
this.name = user.displayName;
this.uid = user.uid;
} else {
this.name = "Unknown";
}
});
答案 1 :(得分:1)
您还可以将用户数据保存到本地/会话存储中,以防服务/防护由于异步操作而无法及时接收到该数据。