4

Angular 2 に飛び込む準備はまだできていませんが、新しいルーターとコンポーネントに取り組みたいと思っていました。

背景として、Angular と組み合わせてエンドポイントを使用する Google App Engine で Python インスタンスを使用しています。

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

4

1 に答える 1

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

注: $auth サービスはsatellizerライブラリから提供されます。

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

于 2016-06-09T13:00:05.810 に答える