0

私は、yeoman、grunt、bower を使用して angularJS アプリケーションを作成しました。簡単なログイン例を試しました。ログイン後、ホームページに飛びます。また、ルートが変更されると、ユーザーがログインしているかどうかがチェックされます。ログインしている場合は、ホームまたは特定のルートにリダイレクトされます。それ以外の場合は、ログイン ページに再ルーティングされます。これはすべて私にとってはうまくいきます。

ここにapp.jsがあります

'use strict';
//Define Routing for app
angular.module('mainApp', []).config(['$routeProvider', '$locationProvider',
  function($routeProvider,$locationProvider) {
    $routeProvider
    .when('/login', {
        templateUrl: 'login.html',
        controller: 'LoginController'
    })
    .when('/register', {
        templateUrl: 'register.html',
        controller: 'RegisterController'
      })
    .when('/home', {
       templateUrl: 'views/home.html',
       controller: 'homeController'
    })
    .otherwise({
       redirectTo: '/home'
    });
}])
.run( function($rootScope, $location) {
    // register listener to watch route changes
    $rootScope.$on( "$routeChangeStart", function() {
        var url=$location.path();
        var location=url.replace("/","");
        var authnotallowed=false;
        if(location.indexOf("login")!=-1||location.indexOf("register")!=-1){
            authnotallowed=true
        }
        if ( $rootScope.loggedUser == null ) {
            // not logged user, should be going to #login
            if(authnotallowed){
                $location.path(url);
            } else{
                $location.path( "/login" );
            }
        } else {
            // not going to #login, should redirect now
            if(authnotallowed){
                $location.path("/home");
            } else{
                $location.path(url);
            }

        }
    });
});

angular.module('mainApp').factory("page", function($rootScope){
    var page={};
    var user={};
    page.setUser=function(user){
        $rootScope.loggedUser=user;
    }
    return page;
});

ここに私のloginControler.jsがあります

'use strict';

angular.module('mainApp').controller('LoginController', function($scope, $location, page) {
    $scope.user = {};
    $scope.loginUser=function(){
        var name=$scope.user.name;
        var pwd=$scope.user.password;
        if(name=="1234" && pwd=="1234"){
            page.setUser($scope.user);
            $location.path( "/home" );
        } else {
            alert("Invalid credentials");
        }
    }
});

すべてが私のためにうまくいっています。

私はうなり声を使用しているので、URLは次のようになります。ログインした後、または他のURLを入力http://localhost:9000/#/login すると、ホームページに移動します。ログアウトして任意のページを試すと、ログインに進みます。http://localhost:9000/#/loginhttp://localhost:9000/#/register

問題は、試してみるhttp://localhost:9000/か、タブを閉じてURLを再度開いたときにログインした後、ログインページに移動することです(loggedUserがnullであることを意味します)。

なぜそれが起こっているのですか?どうすれば解決できますか?

クッキーなどを設定する必要がありますか? もしそうなら、どのように?

4

2 に答える 2