2016-11-30 5 views
0

私はtypescriptで角度2でアプリケーションを作成し、認証を追加します。ang2でcanActivated

私は私のルーティングファイルのauthguardを作成します、

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

そして今:私は私のルートファイルにauthguardを追加

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; 
     } 
    }); 
} 

@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()機能ですこのページをロードするときlocalhost/table_per私はこのエラーがあります: TypeError: Cannot read property 'isLogin' of undefined。 なぜそれが起こるのか本当に分かります。あなたがこのことから、あなたの条件を簡素化することができ、また

@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; 
    } 
} 

+0

... – Dinistro

答えて

1

は、あなただけの適切DIコンテナを使用し、それを使用する活字可能性の利益を取ることができるようにサービスを注入する必要がある

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

:あなたはServerDataComponentを注入していない

return response.status === 200; 
+0

おかげFO r迅速な答え!しかし、unfortunelly、/ログインフォームにネイゲートしないでください( –

関連する問題