Architektur für login-system auf der MEAN-stack?
Ich bin der Entwicklung einer web-app auf dem MEAN-stack (MongoDB, Express, AngularJS und node.js). Entwickle ich ein login-system, und auch einige der Eckigen Strecken geschützt, damit nur eingeloggte Nutzer darauf zugreifen können. Ich versuche zu denken, der beste Weg der Annäherung an die Architektur dieses.
Ich denke da an den aktuellen workflow:
- Benutzer meldet sich in der via AngularJS form, die sendet eine http-POST an eine Express-Endpunkt. Der Endpunkt validiert die Benutzer für die Datenbank und antwortet mit einer OAuth-token sowie einen cookie. Beide befinden sich in der mongo-Datenbank für eine spätere überprüfung.
- Einmal AngularJS erhält die login Antwort, speichert es die empfangenen cookie mit ng-cookies und speichert die OAuth-token in der Benutzer-service.
- Jedes mal wechselt die route in AngularJS nun, der Benutzer-service wird verwendet, um sicherzustellen, dass das cookie ist noch legitim, durch Vergleich mit cookies in der mongo-Datenbank (dies wäre ein API-Aufruf mit Winkel ' s lösen... würde dies einen spürbaren lag?)
- Wenn ein Benutzer klickt auf "log out" oder der cookie abläuft, wird die cookie-und OAuth-token sind beide aus der Datenbank gelöscht und nicht mehr gültig.
Ist dieser Ansatz sinnvoll? Ist es sicher, und es ist relativ effizient/schnell in der Ausführung?
- Das macht Sinn, Sie können auch Gebrauch machen von Sitzungen, so dass Sie nicht die überprüfung der DB jedes mal, wenn Sie die route zu ändern.
- Würde die sessions verwaltet werden, per Express? Und dann auf route ändern, würde ich noch immer machen, einen API-Aufruf, aber es wäre nicht zu überprüfen, die DB?
- Yep,
req.session
-- Check dieser Beitrag: stackoverflow.com/questions/14218725/... -- Oder Sie können die Kasse HTML5sessionStorage
- Und eine viel bessere blog-post über Express-Sitzungen: blog.E-Modul.io/nodejs-und-express-Sitzungen
- werfen Sie einen Blick auf espeo.pl/2012/02/26/Authentifizierung-in-angularjs-Anwendung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Landete ich mit der Kombination aus meinem ursprünglichen workflow mit Ausdrücken, die auth-Beispiel gesehen hier. Es ist wie folgt:
$rootScope
angesehen und angemeldet.$rootScope.user
ist unset (wenn es sein muss), und der Benutzer wird auf die Anmeldeseite umgeleitet.user
Objekt (zum speichern in der $rootScope wie bereits erwähnt).restrict
Funktion, die gewährleistet, dass eine session vorhanden ist, vor der Versendung von Daten an den client. Es gibt eine401
wenn keine Sitzung vorhanden ist, die wird dann behandelt, auf der Eckigen Seite mit diese HTTP-interceptor zu unset$rootScope.user
und umleiten auf die login-Bildschirm.$rootScope.user
ist auf null festgelegt, und der Benutzer wird umgeleitet auf die Startseite.