web-dev-qa-db-ja.com

AngularJs-「ログインした」ユーザーへのアクセスを制限する最良の方法

作成しているアプリのログインシステムの設定に苦労しています。

ユーザーがログインまたはログアウトしたときにCookieを設定できます。ユーザーがログインしている場合にすべてのビューをテストすることは非常にエレガントな解決策だとは思いません。私はここのページにクラックが入る可能性があると思います(かなり大きなアプリです)。

どういうわけかルート変更をインターセプトして、ユーザーがログインしているかどうかを確認し、そうでない場合はログイン/ユーザー作成ページに送信するのが最善の方法だと思います。いくつかの方法を見つけましたが、公式に文書化されているようには見えません。このタイプの方法を実際のケースで使用した人はいますか?それは効果的でしたか?

私のルートファイルは次のようになります。

'use strict';

app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider
        // LOGIN
        .when('/User/LoginUser', {templateUrl: 'views/user/login.html',controller: 'loginCtrl'})

    ....... more routes here.......

        // DEFAULT
        .otherwise({redirectTo: '/'});
}]);

ヘルプや提案、または私がこのようなことをする方法の文書化された実世界の例へのポイントは、大歓迎です!

23
flashpunk

次の例をベースとして、提案されたとおりにルートの変更をインターセプトし、それに応じて行動できます。

    $rootScope.$on('$routeChangeStart', function (event, next) {
        var userAuthenticated = ...; /* Check if the user is logged in */

        if (!userAuthenticated && !next.isLogin) {
            /* You can save the user's location to take him back to the same page after he has logged-in */
            $rootScope.savedLocation = $location.url();

            $location.path('/User/LoginUser');
        }
    });

また、isLogin: trueを次のように、ログインページのルート定義に追加します。

$routeProvider
    // LOGIN
    .when('/User/LoginUser', {templateUrl: 'views/user/login.html',controller: 'loginCtrl', isLogin: true})

あなたのプロジェクトで頑張ってください!

28
urish