我尝试在angularfire中使用persistence来实现以下代码:
constructor(private auth: Auth, private router: Router) {
if (auth.currentUser) this.router.navigate(this.redirect);
}
async loginWithGoogle() {
const provider = new GoogleAuthProvider();
try {
await setPersistence(this.auth, browserLocalPersistence);
await signInWithPopup(this.auth, provider);
this.message = 'Sign in successful';
await this.router.navigate(this.redirect);
} catch (error: any) {
console.error(error);
if (error.code) {
this.message = `${error.code}: ${error.message}`;
} else {
this.message = 'There was a problem signing in. Please try again.';
}
}
}
字符串
然而,我总是得到这个错误,无论setPersistence
方法的位置如何:
Class constructor BrowserLocalPersistence cannot be invoked without 'new'
型
我按照文档(https://firebase.google.com/docs/auth/web/auth-state-persistence)到T;我做错了什么?
我使用的是Angular 13、Angularfire 7和Firebase 9。
3条答案
按热度按时间oaxa6hgo1#
我经历过这个确切的问题-不清楚原因,但我发现,如果我直接从firebase库导入方法,我可以解决它们。
具体来说,我导入这些功能如下:
字符串
而不是从
'@angular/fire/auth'
然后它就完美地工作了(就像在一个普通的JavaScript应用程序中一样)。
jrcvhitl2#
从persisting auth state persistence in the JavaScript/web SDK的文档中:
对于Web应用程序,默认行为是即使在用户关闭浏览器之后也保持用户的会话。
我强烈建议只有在你知道你有一个特定的用例需要它的时候才调用
setPersistence
。在大多数浏览器上,Firebase已经在重新加载之间持久化了auth状态,而不调用setPersistence
。1dkrff033#
我已经离开了我的实现登录与供应商下面。
虽然我在这个项目中还没有迁移到Modular Firebase V9,但身份验证持久化仍然可以正常工作--登录过一次的用户不需要每次回来都重新登录。
我发现在服务中保留认证逻辑是一个很好的做法,可以将其注入到组件或模块中。
在构造器中,您可以找到一种很好的方法来确定您的用户是否已登录,并且在Cloud Firestore中具有与其auth ID相关联的配置文件。
字符串