AngularJS - logowanie i uwierzytelnianie na każdej trasie i kontrolerze

Mam aplikację AngularJS utworzoną przy użyciu yeoman, grunt i bower.

Mam stronę logowania z kontrolerem, który sprawdza uwierzytelnianie. Jeśli poświadczenia są poprawne, przekierowuję do strony głównej.

app.js

'use strict';
//Define Routing for app
angular.module('myApp', []).config(['$routeProvider', '$locationProvider',
  function($routeProvider,$locationProvider) {
    $routeProvider
    .when('/login', {
        templateUrl: 'login.html',
        controller: 'LoginController'
    })
    .when('/register', {
        templateUrl: 'register.html',
        controller: 'RegisterController'
      })
    .when('/forgotPassword', {
        templateUrl: 'forgotpassword.html',
        controller: 'forgotController'
      })
   .when('/home', {
       templateUrl: 'views/home.html',
       controller: 'homeController'
    })
    .otherwise({
       redirectTo: '/login'
    });
//    $locationProvider.html5Mode(true); //Remove the '#' from URL.
}]);

angular.module('myApp').factory("page", function($rootScope){
    var page={};
    var user={};
    page.setPage=function(title,bodyClass){
        $rootScope.pageTitle = title;
        $rootScope.bodylayout=bodyClass;
    };
    page.setUser=function(user){
        $rootScope.user=user;
    }
    return page;
});

LoginControler.js

'use strict';

angular.module('myApp').controller('LoginController', function($scope, $location, $window,page) {
    page.setPage("Login","login-layout");
    $scope.user = {};
    $scope.loginUser=function()
    {
        var username=$scope.user.name;
        var password=$scope.user.password;
        if(username=="admin" && password=="admin123")
        {
            page.setUser($scope.user);
            $location.path( "/home" );
        }
        else
        {
            $scope.message="Error";
            $scope.messagecolor="alert alert-danger";
        }
    }
});

Na stronie głównej mam

<span class="user-info">
    <small>Welcome,</small>
    {{user.name}}
</span>
<span class="logout"><a href="" ng-click="logoutUser()">Logout</a></span>

wloginController, Sprawdzam dane logowania i jeśli się powiedzie, ustawiam obiekt użytkownika w fabryce usług. Nie wiem, czy to prawda, czy nie.

Potrzebuję: Gdy użytkownik jest zalogowany, ustawia pewną wartość w obiekcie użytkownika, dzięki czemu wszystkie inne strony mogą uzyskać tę wartość.

Za każdym razem, gdy zachodzą jakiekolwiek zmiany trasy, kontroler powinien sprawdzić, czy użytkownik jest zalogowany, czy nie. Jeśli nie, powinien przekierować do strony logowania. Ponadto, jeśli użytkownik jest już zalogowany i powraca do strony, powinien przejść do strony głównej. Kontroler powinien również sprawdzić poświadczenia na wszystkich trasach.

Słyszałem o ng-cookies, ale nie wiem, jak ich używać.

Wiele przykładów, które widziałem, nie było zbyt jasne i używają jakiegoś rodzaju ról dostępu lub czegoś takiego. Nie chcę tego. Chcę tylko filtr logowania. Czy ktoś może dać mi jakieś pomysły?

questionAnswers(10)

yourAnswerToTheQuestion