我想限制用户使用特定的gmail域在我的Firestore应用程序中登录。我发现了类似的问题here,但这与Firestore完全不同。所以让我解释一下我的要求。
假设一家名为abc.com
的公司正在使用gmail服务,他们已将所有电子邮件帐户集成到gmail中。因此,他们可以使用该帐户使用Gmail电子邮件服务。所以我想限制只使用username@abc.com
gmail帐户登录我的firestore应用程序的用户。
我搜索了很多,但没有找到任何关于此的文档。
答案 0 :(得分:2)
似乎没有一个可靠的Firestore解决方案,但我有一个复合解决方案:
很抱歉粘贴代码段,但是我无法让格式化程序格式化所有代码。
我的组件代码:
docker stop <container-id>
docker start <container-id>
我的服务代码
ngOnInit(): void {
this.leadsDataSubscription = this.leadService.getLeadsSnapshot()
.pipe(
catchError((e: any) => Observable.throw(this.errorHandler(e)))
)
.subscribe(data => {
this.leadsDataSource.data = data;
this.leadsDataSource.paginator = this.paginator;
this.leadsDataSource.sort = this.sort;
});
this.currentUser = this.authSvc.getCurrentUser();
}
private errorHandler(error: any) {
if (error.name === 'FirebaseError' && error.code === 'permission-denied') {
this.leadsDataSubscription.unsubscribe()
this.authSvc.logout('/unauthorized');
}
}
Firestore规则:
logout(redirectURL?: string) {
this.unsubscribe()
this.afAuth.auth.signOut()
.then(response => {
this.snackBar.open('Signed out');
this.router.navigate([redirectURL || '/']);
})
.catch(error => this.snackBar.open('Error signing out: ' + error));
}
答案 1 :(得分:0)
您不能在电子邮件身份验证或Gmail身份验证中限制域。这是使用Firebase解决方案等第三方进行身份验证时必须做出的权衡。
在android上进行gmail身份验证的情况下,您可以做的是先读取设备上可用的gmail帐户,然后在域匹配时仅显示帐户。这样,您可以至少在UI级别上限制用户具有特定域。
请注意,由于Firebase允许所有gmail帐户使用身份验证,因此用户仍然可以再次进行域登录。您只限制用户界面而不限制系统