Mam aplikację AngularJS stworzoną przy użyciu narzędzi yeoman, grunt i bower.
Mam stronę logowania, na której znajduje się kontroler sprawdzający uwierzytelnianie. Jeśli poświadczenia są poprawne, przekierowuję na stronę główną.
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>
W oknie loginController
sprawdzam dane logowania i jeśli się powiedzie, ustawiam obiekt użytkownika w fabryce usług. Nie wiem, czy to prawda, czy nie.
Potrzebuję tego, gdy użytkownik jest zalogowany, ustawia pewną wartość w obiekcie użytkownika, aby wszystkie inne strony mogły uzyskać tę wartość.
Za każdym razem, gdy dojdzie do zmiany trasy, kontroler powinien sprawdzić, czy użytkownik jest zalogowany. Jeśli nie, powinien przekierować do strony logowania. Ponadto, jeśli użytkownik jest już zalogowany i wraca na stronę, 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 z przykładów, które widziałem, nie było zbyt jasnych i wykorzystywały jakieś role dostępu lub coś w tym rodzaju. Nie chcę tego. Chcę tylko filtr logowania. Czy ktoś może mi dać jakieś pomysły?