2016-11-02 3 views
1

Ich stelle den folgenden Controller/Dienst in Angularjs zusammen, um einen Authentifizierungsdienst zu kontaktieren. Ich möchte dies nutzen, um andere Seiten der Angular-Anwendung auf Benutzer einzuschränken, die sich über diesen Dienst authentifiziert haben, aber ich bin mir nicht sicher, wie ich das machen soll. Ich hoffe, dass jemand mich in die richtige Richtung weisen kann. Unten ist mein Controller und Service.Wie beschränke ich den Zugriff auf authentifizierte Benutzer?

Der Service/Controller arbeitet zur Authentifizierung, aber jeder kann zu "welcome.html" oder einer anderen Seite in der Anwendung navigieren. Wie kann ich dies auf Benutzer beschränken, die sich erfolgreich authentifiziert haben?

+0

Erforderliche Erinnerung: Da Ihre gesamte Javascript-App im Browser ausgeführt wird, gibt es hier keine * Lösung, die den Inhalt der Javascript-Website wirklich geheim hält, ohne serverseitige Steuerelemente für bestimmte Seiten oder Daten zu verwenden. Clients, authentifiziert oder nicht, können den Code lesen und den Anwendungsstatus ändern. Stellen Sie sicher, dass Sie die folgenden Lösungen verwenden, um die Benutzeroberfläche (Erkennung/Anmeldung/Abmeldung) einfach zu verbessern, ohne den Zugriff zu beschränken. –

Antwort

0

Ich würde empfehlen, angular-permissions zu verwenden

Sie Ihre Staaten eingerichtet wie so:

.state('home', { 
     url: '/', 
     templateUrl: 'templates/home.html', 
     parent: 'parent', 
     data: { 
      permissions: { //section for permissions 
      only: 'isAuthorized', // only allow loged in users 
      redirectTo: 'login' // if not allowed redirect to login page 
      } 
     }, 
     }) 

.state('login', { 
     url: '/login', 
     templateUrl: 'templates/login.html', 
     parent: 'login-parent', 
     data: { 
      permissions: { 
      only: 'anonymous', 
      redirectTo: 'home' 
      } 
     } 
     }) 

und richtete zwei Gruppen für die Authentifizierung:

//A Group for not logged in users 
.run(function(PermPermissionStore) { 
    PermPermissionStore 
    .definePermission('anonymous', function() { 
     // Do your authentification here 
     // you can sett up your funtions elsewere and call them here 
     // return true if unauthorized 
     var auth = auth_function() 
     if (auth === true) { 
     return false 
     } else { return true } 
    }) 
}) 

//group for authentificated users 
.run(function(PermPermissionStore) { 
PermPermissionStore 
    .definePermission('isAuthorized', function() { 
     // Do your authentification here 
     // return true if authorized 
     var auth = auth_function() 
     if (auth === true) { 
     return true 
     } else { return false } 
    }) 
}) 
0

auf Ihrer Root-App js Datei run method check auf auth value und redirect wenn nicht authentifiziert, ist die run-Methode auf Ihrem app.js ein guter Ort, um diese Uhr zu setzen:

SEE FIDDLE EXAMPLE OF YOUR CODE

.run(['AuthenticationService', '$location', '$rootScope', function (AuthenticationService, $location, $rootScope) { 

      $rootScope.$watch(function() { 
       if (!AuthenticationService.isAuthenticated()) 
        $location.path("/login"); 

       return $location.path(); 
      }); 


     }]) 

Diese einfache Uhr wird den Auth-Wert überprüfen, indem Sie Ihre IsAuthenticated Methode in der AuthenticationService Aufruf, so dass Sie keine unauthed Benutzer eine beliebige Seite wird Zugriff sicher sein können, sollten Sie die Logik ändern, indem Sie eine weitere Bedingung hinzugefügt um die Routen zu überprüfen, um den Zugriff auf die angegebenen Seiten zu beschränken.

+0

Ich muss etwas verpassen. Dieser Code trifft, wenn ich auf die anfängliche Anmeldeseite gehe, aber wenn ich zu /SomePageThatRequiresAuth.html navigiere, trifft der Code nicht und die Seite wird geladen, obwohl der Benutzer nicht authentifiziert wurde. – Dave

+0

Es sieht nicht so aus, als ob mein AuthenticationService erfolgreich in die run-Methode injiziert wird. Irgendwelche Ideen? – Dave

+0

Kein Fehler, ich bekomme nur einen leeren Bildschirm. – Dave

Verwandte Themen