我的认证是
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class CheckToken implements CanActivate {
constructor(private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
let url: string = state.url;
return this.checkLogin(url);
}
checkLogin(url: string): boolean {
var token = localStorage.getItem('id_token');
if(token) {
return true;
}
this.router.navigate(['/login']);
return false;
}
}
问题是行this.router.navigate(['/login'])
调用无限次和分页符。它工作正常,但更新angular-cli
后发生此错误
我的路线
const appRoutes: Routes = [
{ path: '', redirectTo: '/dashboard', pathMatch: 'full', canActivate: [CheckToken] },
{ path: 'login', component: LoginComponent },
{ path: 'logout', component: LogoutComponent },
];
答案 0 :(得分:2)
这些行出了问题
if(token && url=="/login"){
return true;
}
如果用户不登录 - >> token = null / undefined, - >永远循环。
试试这个:
if(token || url=="/login"){
return true;
}
修改强>
基本上我的问题是我想在令牌存在且用户再次点击时 登录网址我想将他重定向到信息中心页面
if(token) {
if (url=="/login") {
this.router.navigate(['/dashboard']);
}
return true;
}
或
在LoginComponent中重定向