Uiteindelijk heb ik mijn oorspronkelijke workflow gecombineerd met het auth-voorbeeld van Express, gezien hier . Het is als volgt:
- Wanneer de gebruiker de app voor het eerst laadt, wordt een http-aanroep gedaan naar een Express-eindpunt dat controleert of er al een sessie bestaat voor de gebruiker. Zo ja, dan wordt de gebruiker opgeslagen in
$rootScope
en beschouwd als ingelogd. - Elke keer dat de AngularJS-route verandert, wordt hetzelfde eindpunt geopend. Routebeveiliging is gespecificeerd op een manier die vergelijkbaar is met die beschreven hier
. Als het eindpunt ooit retourneert dat er geen sessie bestaat,
$rootScope.user
is uitgeschakeld (indien nodig), en de gebruiker wordt doorgestuurd naar de inlogpagina. - Wanneer het aanmeldingsformulier is verwerkt, wordt het naar een Express-eindpunt gepost. Het eindpunt haalt de gebruiker op uit de mongoDB (als deze bestaat) en probeert het wachtwoord te hashen. Als het een overeenkomst is, wordt de sessie van de gebruiker ingesteld, opgeslagen in de mongo DB, en het eindpunt retourneert de
user
object (gebruikt om op te slaan in $rootScope zoals eerder vermeld). - Telkens wanneer er toegang wordt verkregen tot verdere eindpunten, worden de functies eerst doorgegeven via de
restrict
functie die ervoor zorgt dat er een sessie bestaat voordat er gegevens naar de client worden verzonden. Het retourneert een401
als er geen sessie bestaat, wordt deze aan de hoekige kant afgehandeld met behulp van deze HTTP-interceptor om$rootScope.user
uit te schakelen en omleiden naar het inlogscherm. - Als de gebruiker op "uitloggen" aan de hoekige kant klikt, wordt de sessie uitgeschakeld en verwijderd uit de mongo DB,
$rootScope.user
is ingesteld op null en de gebruiker wordt teruggestuurd naar de voorpagina.