我的情景很简单。我创建了一个Firebase网络应用,并使用Google帐户进行连接。问题是我需要在每次刷新页面时重新登录,以下是步骤:
代码很简单:
firebase.initializeApp(config);
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider);
...
public onAuthStateChanged(context: any, user: any) {
if (user) { ...
...
//currentUser is defined
get currentUser(): any {
return firebase.auth().currentUser;
}
刷新页面
//currentUser is undefined
get currentUser(): any {
return firebase.auth().currentUser;
}
...
if(!currentUser) {
firebase.auth().signOut();
firebase.initializeApp(config);
}
我知道Firebase会话持久性的选项,但我的理解是这种行为不是默认行为。参看医生:
https://firebase.google.com/docs/auth/web/auth-state-persistence
我将这一行添加到我的代码中以防万一,它没有区别:
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)
我还检查过匿名身份验证也是如此。
答案 0 :(得分:2)
每次调用signInWithPopup(...)
时,都会显示一个弹出窗口,要求用户签名。因此,只有在检测到用户未登录时,才应调用此方法。为此,请从您的onAuthStateChanged
回调中调用它:
firebase.initializeApp(config);
var provider = new firebase.auth.GoogleAuthProvider();
...
public onAuthStateChanged(context: any, user: any) {
if (user) {
console.log(user);
...
}
else {
firebase.auth().signInWithPopup(provider);
}
...
}