下記URLのstackさんを参考にやってみた。っていってもほぼそのまんまだけど。
■constants.js(ログインが必要なページ(URI)をここで定義しておく)
app.constant('requireAuth', [
'/admin/dashboard'
]);
■app.js
app.run(['$rootScope', '$location', 'auth', 'requireAuth',
function($rootScope, $location, auth, requireAuth) {
// login check
$rootScope.$on('$routeChangeStart', function(event) {
if (requireAuth.indexOf($location.path()) > -1 && !auth.isLoggedIn()) {
// ログインページに飛ばす
event.preventDefault();
$location.path('/login');
}
});
}]);
■factories.js
app.factory('auth', function(){
var user;
return {
setUser: function(aUser) {
user = aUser;
},
isLoggedIn: function() {
return (user) ? user : false;
}
}
});
■controllers.js(ログインが必要なコントローラーにて)
var controller = function($scope, $location, auth) {
$scope.$watch(auth.isLoggedIn, function(value, oldValue) {
if (!value && oldValue) {
// ログインページに飛ばす
$location.path('/login');
}
}, true);
}
こんな感じでなかなかよさ気に実装することが出来た。
ただしこのままだとページをリロードするとログアウトしてしまうため、そこは$cookieなどをうまく利用してログイン状態を維持しておくのがベター。