2017-02-08 3 views
1

私はいくつかの保護されたページでアプリを作っていますこのページには登録ユーザーのみがアクセスできます。タイムアウトや変更後のブラウザタブでセッションをチェックする必要があります。ユーザーが既に他のタブまたはセッションの終了時に終了した場合、アプリはユーザーをログインページにリダイレクトする必要があります。現在のルートガードを取得するには

ガードを使用してページを保護していますので、自分のガードによって現在のルートを確認する方法が正しいと思います。ユーザーセッションの期限が切れた/閉じられ、現在のルートが特定のガードを使用している場合、ページはリダイレクトされます。

誰でも現在のルートの警備員を助けることができますか?

ルータとActivatedRouteのドキュメントを確認しましたが、その情報が見つかりませんでした。

+0

[許可された不正なメインビュー]の可能な複製(http://stackoverflow.com/questions/41570937/authorized-vs-unauthorized-main-view) –

+0

この投稿を確認:http://stackoverflow.com/questions/41570937/authorized-vs-unauthorized-main-view/41571878#41571878 ユーザーが登録されているかどうかを確認するサービスをセットアップし、このサービスでガードを設定するだけです。 –

+0

ガードの使い方を教えてください。私はすでにそれを使用しています。ユーザーは既に保護されたページにあり、セッションがアクティブであるかどうかはGUIの操作なしで確認する必要があります。私はapp.component.tsでそれをやろうとしています。 – avvensis

答えて

0

私は全く同じ問題に直面しています。 必要性をよりよく理解するためのシナリオを示します。 一部のページが保護されていて、保護されていないページがあるとします。適切なページを保護するためにガードが使用されます。今、ユーザーが保護されたページ(プロフィールを見てみましょう)にあり、「ログアウト」ボタンをクリックしたとします。何が起こるはずですか?ユーザーはホームページにリダイレクトする必要があります。しかし、ユーザーがガードによって保護されていないページにいる場合、実際には何も起こりません。もちろん、リダイレクトが発生する必要がある場合はすべてのsignleページで確認することは可能ですが、それは最善の解決策ではありません。より良い解決策はAuthServiceでこの状況を処理することです。ログアウトは実際には起こりますが、実際にアクティブルートがガードによって保護されているかどうかを知る必要があります。

0

私もこの問題に直面していました。だから私はちょっとした研究をして、このソリューションを開発しました:

AuthServiceがhttps://angular.io/guide/router#canactivate-requiring-authenticationのように実装されていると仮定します。 AuthServiceで

以下を追加します。

Logout() { 
// (logout logic here) 
    var currentRouteConfig = this.router.config.find(f=>f.path == this.router.url.substr(1)); 
    if(currentRouteConfig != null && currentRouteConfig.CanActivate != null) { 
    this.redirectUrl = this.router.url; 
    this.router.navigate(['/login']) 
} 

SUBSTR(1)だけルータの設定でパスとしてリーディング「/」を削除し、それなしです。

これは、canActivateが常に認証ガードを実装していることを前提としていることを前提としています。他のロジックでは、認証ガードをより深く確認する必要があります。

関連する問題