我正在构建一个angular2 SPA。我正在使用内置的路由器组件,并且我已经实现了一个routeGuard。像这种警卫通常那样,我检查用户是否登录,如果他不是,那么我希望将他发送到登录屏幕。通常情况下,我使用的是#方案,因为这个应用程序必须与其他代码在同一个Web服务器上很好地发挥作用。router.navigate为什么在空白页面上留下我没有错误信息?
预期行为:出现登录屏幕。
实际行为:路由“无处”。我坐着看着一个空白的屏幕。
路线后卫:
import { Injectable } from '@angular/core';
import { AuthenticationService } from './authentication.service';
import {
CanActivate, Router,
ActivatedRouteSnapshot,
RouterStateSnapshot
} from '@angular/router';
import { GlobalsService } from "./globals.service";
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private _service: AuthenticationService, private router: Router, private _globals: GlobalsService) {
console.log("Auth Guard Ready!");
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
let url: string = state.url;
return new Promise<boolean>((resolve, reject) => {
if (this._service.checkLoggedIn()) {
console.log("User is logged in, possible to check for globals");
if (this._globals.globalsReady) {
console.log("Globals are already loaded, user may proceed to the page");
resolve(true);
return;
}
console.log("Globals are not ready yet, asking server for the data..");
this._globals.getGlobals()
.done(() => {
console.log("Globals are now loaded, user may proceed to the page");
resolve(true);
})
.error((error: any) => {
console.log("Error fetching globals. Navigation terminated");
console.log("Error: " + error);
resolve(false);
return;
});
} else {
// we couldnt find any way to auth, so sending user to login screen
console.log("User is not logged in - sending user to login page, no need for globals there");
this.router.navigate(["/login"]);
}
});
}
}
你能不保护正常到达您的登录路由?你确定问题来自它吗? –
你也应该'resolve(false);'当用户重定向后没有登录。 –
是的,我可以正常登录路线,我99%肯定它是来自后卫 – user230910