我正在尝试在应用中设置管理系统,以限制对应用程序某些区域的访问。它非常基本,只需在firebase中创建一个具有以下信息的新对象。默认情况下Admin设置为false,我会手动将其更新为true,因为很少有人可以处理。
这是我的登录功能
login() {
this.firebaseService.login(this.user)
.then(() => {
this.isAuthenticating = false;
console.log(this.user.email);
this.userDetails = <any>this.firebaseService.getUserInfo();
console.log(this.userDetails);
this.userDetails.subscribe(users => {
if(users.user.admin) {
console.log('yes');
this.routerExtensions.navigate(["/admin"], { clearHistory: true } );
}
else {
console.log('no');
this.routerExtensions.navigate(["/"], { clearHistory: true } );
}
});
})
.catch((message:any) => {
this.isAuthenticating = false;
});
}
console.log(this.userDetails)正在将[Object object]打印到控制台。
接下来是服务电话
getUserInfo(): Observable<any> {
return new Observable((observer: any) => {
let path = "/Users/"+ BackendService.token;
let onValueEvent = (snapshot: any) => {
this.ngZone.run(() => {
let results = this.handleSnapshot(snapshot.value);
console.log(JSON.stringify(results));
observer.next(results);
});
};
});
}
那么处理我想要做的事情的最有效方法是什么?对不起,如果这是一个糟糕的问题,我通常使用AngularFire auth,并且几乎没有使用常规firebase的经验。
答案 0 :(得分:1)
考虑使用自定义声明来控制访问权限并为用户分配管理员权限: https://firebase.google.com/docs/auth/admin/custom-claims
只要您知道管理员用户的uid或电子邮件,就可以使用admin SDK将该用户设置为admin。它只是一个API调用。
admin.auth().setCustomUserClaims(uid, {admin: true}).then(() => {
// The new custom claims will propagate to the user's ID token the
// next time a new one is issued.
});
然后强制对用户进行令牌刷新,获取令牌并使用解析(您在该用户上设置的附加声明将传播到其令牌): https://firebase.google.com/docs/auth/admin/custom-claims#access_custom_claims_on_the_client 然后,您可以根据声明值(admin:true)相应地导航您的用户。