0

ログインしてコンテンツを編集できるように、1 人の管理者用のアプリを作成しています。アプリにログインすると、ログインしていない場合に通常の公開ドキュメントが表示されるのではなく、非公開の HTML ドキュメント構造が表示されます。認証にAngular-route、Session、およびPassportを使用しています。ユーザーがサイトの別のページにリンクするたびに、ユーザーがログインしているかどうかを確認したいと考えています。そのため、許可されていない場所に移動すると、サイトのコンテンツを編集できなくなります。

ローカルホストでアプリを実行すると、$injector:modulerr が発生します。ReferenceError は、checkAuth が定義されていないことを示しています。

ここで提案されているように、 $rootScope を使用してグローバル変数を作成しようとしました:

app.run(['$rootScope', '$http', function($rootScope, $http){
    $rootScope.checkAuth = function(){
        console.log("rootScope things are happening");
        $http.get('/login/loggedin').success(function(user){
            if (user !== '0') {
                console.log('Authenticated');
                return true;
            } else {
                console.log('Not Authenticated');
                return false;
            }
        });
    };
}]);

したがって、ユーザーがログインしている場合は true を取得し、ログインしていない場合は false を取得します。しかし、それでも checkAuth is not defined のインジェクター エラーが発生し、コンソール ログがまったく表示されません。

$rootScope の Angular ドキュメントでは、次の形式を使用するように指示されています。

$rootScope.Scope([providers], [instanceCache]);

だから、私はこれを試しました:

$rootScope.Scope(['$rootScope', '$http', function($rootScope, $http){...

残念ながら、それもうまくいきません。

これは、Passport と Angular を一緒に使用した例で、私は多少役に立ちましたが、複数のユーザーが登録できるようにしています (これは望ましくありません)。ユーザーは Web サイトの複数のページにログインしています。ただし、同様のコントローラーとルート ファイルを参照すると役立つ場合があります。

以前の同様の質問で提案されているように、ファクトリとサービスを使用して同様のことを行うことができることは知っていますが、別の道を試す前にこのルートに進むことを望んでいました. もちろん、それが最善の方法である場合は、それを試してみます。

4

1 に答える 1

1

提供された rootscope 宣言は私には問題ないようです。

rootscope 値を割り当てます。

app.run(function($rootScope) {
    $rootScope.checkAuth = function(){
        $http.get('/login/loggedin').success(function(user){
            if (user !== '0') {
                return true;
            } else {
                return false;
            }
        })
    };
});

のように使用します ($rootscope の依存関係を忘れないでください)。

app.controller('myCtrl', function($scope, $rootScope) {
    $scope.authenticated = function() {
        return $rootScope.checkAuth ;
    };
});

比較するライブ サンプルを参照してください: http://jsfiddle.net/TmPk5/6/

于 2015-06-04T17:26:18.567 に答える