2016-11-30 47 views
0

我使用typescript創建了角2中的一些應用程序並添加了身份驗證。canActivated in angular2

我爲我的路由文件創建authguard:

@Injectable() 
export class AuthGuard implements CanActivate { 

public router: Router; 
public serverThisLogin: ServerDataComponent; 

constructor(router: Router) { 
    this.router = router; 
} 

public canActivate(): boolean { 
    if (this.serverThisLogin.isLogin) { 
     return true; 
    } 
    this.router.navigate(["/login"]); 
    return false; 
} 
} 

這是isLogin()功能:

public isLogin (username: string, password: string): Observable<boolean> { 
    return this.http.post(authURL + loginURL, 
          JSON.stringify({ password, username })) 
    .map((response: Response) => { 
     if (response.status === 200) { 
      return true; 
     } else { 
      return false; 
     } 
    }); 
} 

我添加authguard在我的路由文件:

{ canActivate: [AuthGuard], component: LaskComponent, path: "table_per" } 

而現在,當我加載此頁localhost/table_per我有這個錯誤: TypeError: Cannot read property 'isLogin' of undefined。 我真的明白爲什麼會發生。

+0

你不注入ServerDataComponent ... – Dinistro

回答

1

你只需要注入的服務才能使用它,採取的打字稿可能性利潤使用正確的DI容器:

@Injectable() 
export class AuthGuard implements CanActivate { 

public router: Router; 
public serverThisLogin: ServerDataComponent; 

constructor(private router: Router, private serviveThisLogin: ServerDataComponent) {} 

public canActivate(): boolean { 
    if (this.serverThisLogin.isLogin) { 
     return true; 
    } 

    this.router.navigate(["/login"]); 
    return false; 
    } 
} 

此外,您可以從這個簡化您的條件:

if (response.status === 200) { 
      return true; 
     } else { 
      return false; 
     } 

要這樣:

return response.status === 200; 
+0

感謝FO快速回答!但不幸的是,navegate /登錄表單不起作用( –