gpt4 book ai didi

用户 Angular 色的 AngularFire2 路由守卫

转载 作者:太空狗 更新时间:2023-10-29 19:30:34 25 4
gpt4 key购买 nike

我有一个 Angular 2 应用程序设置了一个路由守卫,它当前检查用户是否登录。这工作正常,但现在我正在尝试设置另一个路由守卫,它不仅检查用户是否登录,还检查他们是否是管理员用户。

这是我目前拥有的:

import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import { AngularFire } from 'angularfire2';
import { AuthService } from './auth.service';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/first';
import 'rxjs/add/operator/take';

@Injectable()
export class AdminGuard implements CanActivate {

constructor(
private af: AngularFire,
private authService: AuthService,
private router: Router
) {

}

canActivate(route:ActivatedRouteSnapshot, state:RouterStateSnapshot):Observable<boolean> {

let redirectURL:string = state.url;

return this.af.auth.map((auth) => {
if (auth == null) {
this.authService.redirectURL = redirectURL;
this.router.navigate(['/login']);
return false;
} else {

return this.af.database.object('roles/admins/'+auth.uid, { preserveSnapshot: true })
.take(1)
.subscribe(res => {
if (res.val()) {
console.log('is admin, return true');
return true;
} else {
console.log('access denied');
this.router.navigate(['/']);
return false;
}
});

}
}).first();

}

}

当我尝试前往受此守卫保护的路线时,我得到 'is admin, return true'console.log 输出,但随后什么也没有发生。新路线不会显示,应用程序只会停留在当前页面。

有人能告诉我哪里出错了吗?感谢您的帮助。

最佳答案

最后得到它的工作:

let redirectURL:string = state.url;

return this.af.auth
.flatMap(auth => {
if (auth == null) {
return new Promise(resolve => { resolve({}) });
} else {
return this.af.database.object(`roles/admins/${auth.uid}`);
}
})
.map(data => {
if (data.$value) {
return data.$value;
} else {
// User doesn't have permission
this.authService.redirectURL = redirectURL;
this.router.navigate(['/404']);
return false;
}
})
.first();

仍然需要测试,但我在离开办公室前很快就完成了。现在似乎工作正常:)

关于用户 Angular 色的 AngularFire2 路由守卫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40041696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com