私は、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/#/login
http://localhost:9000/#/register
問題は、試してみるhttp://localhost:9000/
か、タブを閉じてURLを再度開いたときにログインした後、ログインページに移動することです(loggedUserがnullであることを意味します)。
なぜそれが起こっているのですか?どうすれば解決できますか?
クッキーなどを設定する必要がありますか? もしそうなら、どのように?