2016-03-27 5 views
4

私はAngular 2に飛び込む準備が整っていませんが、私は新しいルータとコンポーネントに取り組みたいと思っていました。AngularJS 1.5のコンポーネントルーターをユーザー認証と組み合わせて使用​​するにはどうすればよいですか?

バックグラウンドでは、Google App EngineでPythonインスタンスを使用しています。このアプリケーションでは、EndpointをAngularと組み合わせて使用​​しています。

AngularJS 1.5のコンポーネントルーターを認証ユーザーの有無にかかわらずHTMLに対応させるにはどうすればよいですか?私は可能な限り最も「角のある方法」でこれを達成したいと考えています。現在のドキュメントは私には分かりません。

+0

私は自分自身に同じ質問をしています。 Angularの2バージョンを使用する1つの方法は、RouterOutletを拡張することだと思われますが、Angular 1.5の方法も見つけられません。 – Boris

+0

@Boris '$ canActivate'は、falseを返す約束を返すことでユーザーがログアウトした場合にアクセスを拒否できる場所です。その中で私は '$ rootRouter.navigate([" LogIn "])'できると思います。 –

+0

合意しましたが、コンポーネントごとのソリューションではなく、あらゆるルートの認証を処理できる、より包括的なソリューションが求められていました。 – Boris

答えて

0

最近、私は同じことで苦労しました。コンポーネント定義オブジェクトで

$ canActivateプロパティを追加します:

import { MainController } from './main.controller'; 

export class MainComponent { 

    constructor() { 
     this.controller = MainController; 
     this.templateUrl = 'app/main/main.html'; 
     this.$canActivate = (Auth) => { 
      'ngInject'; 

      return Auth.redirectUnauthenticated(); 
     }; 
    } 
} 

すべての認証情報を保持する、認証サービスを作成します。

export class AuthService { 

    constructor($auth, UserApi, $q, $rootRouter, Storage) { 
     'ngInject'; 

     this.$auth = $auth; 
     this.$q = $q; 
     this.$rootRouter = $rootRouter; 
     this.storage = Storage; 
     this.userApi = UserApi.resource; 
    } 

    /** 
    * Check user's status 
    */ 
    isAuthenticated() { 
     return this.$auth.isAuthenticated(); 
    } 

    /** 
    * Redirect user to login page if he is not authenticated 
    */ 
    redirectUnauthenticated() { 
     if (!this.$auth.isAuthenticated()) { 
      this.$rootRouter.navigate(['Login']); 

      return false; 
     } 

     return true; 
    } 
} 

注:$の認証サービスを来て、私はこのようにそれを解決しましたsatellizerライブラリから。

基本的には、認証されたアクセスのみが必要なすべてのコンポーネント(ナビゲート可能)では、同じ$ canActivateプロパティを設定します。私はこれが一番いい解決策であるかどうかは分かりませんが、うまくいきます:)

関連する問題