Det slutade med att jag kombinerade mitt ursprungliga arbetsflöde med Expresss auth-exempel, se här . Det är som följer:
- När användaren initialt laddar appen görs ett http-anrop till en Express-slutpunkt som kontrollerar om det redan finns en session för användaren. Om så är fallet lagras användaren i
$rootScope
och anses vara inloggad. - Varje gång AngularJS-rutten ändras, nås samma slutpunkt. Ruttskydd specificerades på ett sätt som liknar det som beskrivs här
. Om slutpunkten någonsin returnerar att ingen session existerar,
$rootScope.user
är avaktiverad (om det behöver göras), och användaren omdirigeras till inloggningssidan. - När inloggningsformuläret bearbetas skickas det till en Express-slutpunkt. Slutpunkten hämtar användaren från mongoDB (om den finns) och försöker hasha lösenordet. Om det är en matchning ställs användarens session in, lagras i mongo DB, och slutpunkten returnerar
user
objekt (används för att lagra i $rootScope som tidigare nämnts). - Varje gång ytterligare slutpunkter nås, skickas funktionerna först genom
restrict
funktion som säkerställer att en session existerar innan data skickas till klienten. Den returnerar en401
om ingen session existerar, som sedan hanteras på Angular-sidan med denna HTTP-interceptor för att avaktivera$rootScope.user
och omdirigera till inloggningsskärmen. - När användaren klickar på "logga ut" på vinkelsidan avaktiveras sessionen och raderas från mongo DB,
$rootScope.user
är inställd på null och användaren omdirigeras tillbaka till förstasidan.