Ich bin mir bewusst, dass diese Frage mehrmals diskutiert wurde, aber die Lösungen nicht in meine Anforderung passen. Die Suche ist einfach. Wenn der Benutzer nicht angemeldet ist, sollte der Benutzer zur Anmeldeseite umgeleitet werden. Wenn ich es in $ on mache, erzeugt es eine Endlosschleife. Lass mich wissen, was die beste Lösung ist.angularjs UI-Router erzeugt Endlosschleife
var adminpanel = angular.module('administrator', ['ngMessages','ui.router','ui.bootstrap','ngCookies']);
adminpanel.config(function ($stateProvider, $urlRouterProvider) {
// $urlRouterProvider.otherwise("/login");
$urlRouterProvider.otherwise(function($injector, $location) {
var $state = $injector.get("$state");
$state.go("login");
});
$stateProvider
.state('login', {
url: "/login",
controller:"userCtrl",
templateUrl: "views/login.tpl.html",
permissions:{except:['admin']}
}
)
.state('menu', {
templateUrl: "views/menu.tpl.html",
controller:'adminCtrl',
permissions:{allow : ['admin']}
}
)
.state('menu.dashboard', {
url: "/dashboard",
templateUrl: "views/dashboard.tpl.html",
permissions:{allow : ['admin']}
}
)
});
adminpanel.run([ '$rootScope', '$state', '$stateParams','$cookieStore',function ($rootScope, $state, $stateParams,$cookieStore) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
$rootScope.$on('$stateChangeStart',function(event, toState, fromState){
if($rootScope.session == undefined && $cookieStore.get('name') == undefined){$rootScope.session={}}
else if($rootScope.session == undefined && $cookieStore.get('name') != undefined){
$rootScope.session={set:true, name : $cookieStore.get('name'), userid :$cookieStore.get('userid'), role:$cookieStore.get('role')};
};
//Added below lines as update
if(toState.name === "login"){
return;
}
//Added above lines as update
var authorized = true;
if(Object.keys($rootScope.session).length === 0){
event.preventDefault();
$state.go('login');
}
else if(Object.keys(toState.permissions).length !=0){
console.log($rootScope.session.role);
angular.forEach(toState.permissions, function(value,key){
angular.forEach(value,function(role){
if(key === 'except' && role === $rootScope.session.role)
{authorized = false;}
else if(key === 'allow' && role !== $rootScope.session.role)
{authorized = false;};
});
});
}
if(!authorized){
event.preventDefault();
$state.go('menu.dashboard');
};
});
}]);
Vielen Dank im Voraus für Hilfe.
Update 1:
Die Lösung funktioniert gut. Wenn der Benutzer jedoch angemeldet ist, darf der Benutzer nicht auf die Anmeldeseite zugreifen, wenn er versucht, sie über die Adressleiste zu erreichen. Also habe ich einen Berechtigungsparameter mit Ausnahmeschlüssel erstellt.
Aber wenn der Benutzer Login-Seite über die Adressleiste erreicht, wird die Anmeldeseite generiert, die nicht sollte und es sollte zu menu.dashboard umgeleitet werden.
Hoffe ich bin klar.
Vielen Dank mein Freund. Ich habe es für mehr als 6 Stunden geschlagen. – alaksandarjesus
Großartig wenn das irgendwie geholfen hat;) Genialer UI-Router;) –
Ich habe gerade ein Update gemacht. Kannst du dir @Radim Kohler ansehen? Aber wenn der Benutzer die Login-Seite über die Adressleiste erreicht, wird die Login-Seite generiert, was nicht der Fall sein sollte. Er sollte auf menu.dashboard umgeleitet werden. – alaksandarjesus