Angular可以激活无限呼叫

时间:2017-02-03 10:12:53

标签: javascript angular angular-routing

我的认证是

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 },  
];

1 个答案:

答案 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中重定向