2016-12-29 4 views
0

Dies ist das dritte Mal in dieser Woche, dass ich einige einen Code erreichen, dass Benutzer ein AppController wie dies in ihmIonic App globale AppCtrl, ist das richtig?

<body ng-app="app" ng-controller="AppCtrl"> 
    <div id="inner" ng-view="" ></div> 
</body> 

Und im Controller App sie umleiten zu den verschiedenen Teilen der App, wie diese

.controller("AppController",function({$location}{ 
    if(isUserAthenticated){ 
     $location.path("/home"); 
    }else{ 
     $location.path("/login") 
    } 
}); 

Ist dies der richtige Weg, dies zu tun. Weil es mir nicht scheint. Ich sehe diesen Ansatz sehr hacky und es sollte einen richtigen Weg geben, es zu tun. Kannst du mir den besten und empfohlenen Weg erklären, mit dieser Art von Szenarien umzugehen?

UPDATE: Routing Konfiguration

// delete $httpProvider.defaults.headers.common["Access-Control-Request-Headers"]; 
    $routeProvider 
     .when('/app', { 
      templateUrl: 'views/login.html', 
      controller: 'AppCtrl' 
     }). 
    when('/privados', { 
     templateUrl: 'views/privados.html', 
     controller: 'PrivadosCtrl as ctrl' 
    }). 
    when('/mensaje/:id', { 
     templateUrl: 'views/mensaje.html', 
     controller: 'MensajeCtrl as ctrl' 
    }). 
    when('/grupales', { 
     templateUrl: 'views/grupales.html', 
     controller: 'GrupalesCtrl as ctrl' 
    }). 
    when('/comunicados', { 
     templateUrl: 'views/comunicados.html', 
     controller: 'ComunicadosCtrl as ctrl' 
    }). 
    when('/contactos', { 
     templateUrl: 'views/contactos.html', 
     controller: 'ContactosCtrl' 
    }). 
    when('/perfil', { 
     templateUrl: 'views/perfil.html', 
     controller: 'PerfilCtrl' 
    }). 
    when('/principal', { 
     templateUrl: 'views/principal.html', 
     controller: 'PrincipalCtrl as ctrl' 
    }). 
    when('/nmensaje/:type', { 
     templateUrl: 'views/nmensaje.html', 
     controller: 'NMensajeCtrl as ctrl' 
    }). 
    when("/user/password",{ 
     templateUrl:"views/passwordreset.html", 
     controller: "ResetPasswordCtrl as ctrl" 
    }). 
    otherwise({ 
     redirectTo: '/app' 
    }); 
+0

Könnten Sie bitte Ihre Routen Config teilen, so kann ich alle zusammen in eine Antwort setzen. –

+0

Dieser Code gehört nicht mir, es ist Legacy-Code, den mir jemand gibt. Aber trotzdem teile ich die Routen-Konfiguration –

Antwort

0

Die beste Art und Weise, dass ich die Authentifizierung in einem Winkel App verwalten gefunden ist folgende:

Im Innern der .config() Methode Ihrer Angular App:

//this event will be fired in every location change. 
$rootScope.$on('$routeChangeSuccess', function(e, toState, fromState) { 
      if (toState.loginRequired) { 
       if (!isUserAthenticated()) { 
        e.preventDefault(); 
        $location.path('/login'); 
       } 
      } 
     }); 

Dann können Sie in Ihren Routen angeben, welche die Anmeldung benötigt:

Darüber hinaus können Sie eine Angular Factory erstellen, um den Authentifizierungsstatus des Benutzers zu verwalten.

Beachten Sie, dass Sie bei diesem Ansatz keine AppCtrl benötigen.