2017-11-02 10 views
0

ユーザーがログインしていない場合、保護されたルートへのアクセスを制限するAuthGuardServiceを正常に実装しました。ユーザーがすでにAngular 4でログインしている場合、ログインルートへのアクセスを制限する方法は?

私が達成しようとしているのは、ユーザーが既にログインしてログインルートにアクセスした場合、ホームページのような別のルートに

あなたは、ログインするユーザーを必要とパスの CanActivateガード使用することができます
+1

ユーザーがすでにログインしている場合、ホームページにリダイレクトするログインルートのための別のcanActivateガードを作成します。 – LLai

+0

サンプルコードを共有してもよろしいですか? @LLai –

+0

それは本質的にBoulbouloubouleが投稿したものです。ログインしている場合はホームページに移動し(falseを返す)、ログインページに移動するようにtrueを返します。次に、このガードをあなたのルート定義のログインルートに添付してください。 – LLai

答えて

0

:あなたが行うことができ

@Injectable() 
export class LoginActivate implements CanActivate { 
    constructor(private authService: AuthService, private router: Router) {} 
    canActivate(
    route: ActivatedRouteSnapshot, 
    state: RouterStateSnapshot 
): Observable<boolean>|Promise<boolean>|boolean { 
    if (!authService.isLoggedIn()) { 
     this.router.navigate(['home']); 
    } 
    return true; 
    } 
} 
+0

動作しません。ユーザーがログインしているときに私が得るのは、「home」ルートの空白ページです。 –

+0

いくつかエラーがありますか?ガードに関する公式文書は次のとおりです。あなたのプロジェクトにそれを実装する方法を理解してください:https://angular.io/guide/router#guards – Boulboulouboule

+0

エラーはありません。単に動作を拒否します。決して気にしない、私は別の方法で、同様の問題を持つ他の人を助けるための回答として掲示します@Boulboulouboule –

0

const ROUTER: Routes = [ 
    {path: 'restricted', component: MyRestrictedCOmponent, canActivate:[LoginActivate]}, 
    {path: 'home', component: HomeComponent}, 
]; 

そして、ホームページ上のログに記録されないユーザーをリダイレクトガードをログインコンポーネントのngOnInitを簡単にチェックして、既に認証されている場合は別のページにリダイレクトしてください:

ngOnInit() { 
    if (this._authService.isLoggedIn) { 
     this._router.navigate(['/apps']); 
    } 
} 

それは私のために働いた!

関連する問題