最近、私は同じことで苦労しました。コンポーネント定義オブジェクトで
$ 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プロパティを設定します。私はこれが一番いい解決策であるかどうかは分かりませんが、うまくいきます:)
私は自分自身に同じ質問をしています。 Angularの2バージョンを使用する1つの方法は、RouterOutletを拡張することだと思われますが、Angular 1.5の方法も見つけられません。 – Boris
@Boris '$ canActivate'は、falseを返す約束を返すことでユーザーがログアウトした場合にアクセスを拒否できる場所です。その中で私は '$ rootRouter.navigate([" LogIn "])'できると思います。 –
合意しましたが、コンポーネントごとのソリューションではなく、あらゆるルートの認証を処理できる、より包括的なソリューションが求められていました。 – Boris