2017-12-20 10 views
0

ログインページと3ページが追加されています。今私は認証機能を行う必要があります。認証が定義されていない場合は、ログインページにリダイレクトする必要があります。認証が真であれば、checkLogin機能に移動する必要があります。私はこれを行う方法を取得していないが、私はページのいずれかでこのように試していた。angle2とtypescriptを使用してページを認証する方法

TS:

import { Router, CanActivate } from '@angular/router'; 

@Injectable() 
export class PageComponent implements CanActivate { 

    constructor(private router: Router) { } 

    canActivate() { 
     if (localStorage.getItem('authToken') == undefined) { 
     this.router.navigate(['/login']); 
     } 
     else { 
      /*Checklogin*/  
     this.ApiService 
      .checklogin() 
      .subscribe(
       user => {} 
     } 
     } 

が、私はエラーを取得:

Class 'PageComponent' incorrectly implements interface 'CanActivate'. 
    Types of property 'canActivate' are incompatible. 
    Type '() => void' is not assignable to type '(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => boolean | Observable<boolean> | Pr...'. 
     Type 'void' is not assignable to type 'boolean | Observable<boolean> | Promise<boolean>'. 

私は私がやっているものを知らないが正しいかどうか、誰も私にあなたが返す必要が

+0

あなたが方法 – Aravind

+0

から何かを返されていない私が行う方法が分からない、私はこの方法を試した、あなたは私を提案することができますしてください – Bhrungarajni

+0

'canActivateを行う方法() '**は値を返す必要があります**。 https://stackoverflow.com/questions/43487827/how-to-apply-canactivate-guard-on-all-the-routes –

答えて

0

を導くことができます boolean or Observable<boolean> or Promise<boolean>からcanActivate

また、

canActivateは何か、この

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){ 
    //Your logic 
} 

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){ 
    if (localStorage.getItem('authToken') == undefined) { 
     return false; 
    } 
    else {  
    return new Observable<boolean>((observer)=>{ 
     this.ApiService 
     .checklogin() 
     .subscribe((res)=>{ 
      //Check user 
      if(condition){ 
       observer.next(true); 
      } 
      else{ 
      observer.next(false); 
      } 
      observer.complete(); 
     }); 
    }); 
    } 

} 
+0

応答をありがとう、私は他のページでこの関数を書く必要がありますか? – Bhrungarajni

+0

実際には、コンポーネントよりもクラスでcanActivateを使用する必要があります。この例を確認してください。https://scotch.io/courses/routing-angular-2-applications/canactivate-and-canactivatechild –

+0

ya確認します。 、この方法以外? – Bhrungarajni

0

CanActivateルートガードbooleanObservableまたはPromiseが返されることを期待するようにする必要があります。返された値に基づいて、ページが認証されます。

あなたの場合、おそらくこのようなことをすることができます。あなたは/あなたは/観測可能約束拒否解決checkloginの実装では

canActivate() { 
    if (localStorage.getItem('authToken') == undefined) { 
    return false; 
    } 
    else { 
     return this.ApiService.checklogin() 
     } 
    } 

次の記事を行くことができます: https://ryanchenkie.com/angular-authentication-using-route-guards

+0

お返事ありがとうございます。私はあなたに@Amalを更新しようとします – Bhrungarajni

関連する問題