3
我有一個角色2應用設置了路由守衛,當前正在檢查用戶是否登錄。這工作正常,但現在我正在嘗試設置另一個不僅檢查用戶是否已登錄的路由警衛,還有他們是否是管理員用戶。用戶角色的AngularFire2路由守衛
這是我的時刻:
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
輸出,但後來什麼也沒有發生。新路線不顯示,應用程序只停留在當前頁面。
有人能告訴我我哪裏出錯了嗎?謝謝你的幫助。
嘗試[[first()'](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-first)。你也有嵌套的訂閱,也許你可以重構代碼... – Sasxa
先刪除()沒有幫助。你將如何去重構代碼? –