В крайна сметка комбинирах оригиналния си работен процес с примера за удостоверяване на Express, видях тук . Той е както следва:
- Когато потребителят първоначално зареди приложението, се прави http извикване към крайна точка Express, която проверява дали вече съществува сесия за потребителя. Ако е така, потребителят се съхранява в
$rootScope
и се счита за влязъл. - Всеки път, когато маршрутът на AngularJS се промени, се осъществява достъп до същата крайна точка. Защитата на маршрута беше определена по начин, подобен на описания тук
. Ако крайната точка някога върне, че не съществува сесия,
$rootScope.user
не е зададено (ако трябва) и потребителят се пренасочва към страницата за вход. - Когато формулярът за влизане се обработва, той публикува в крайна точка Express. Крайната точка извлича потребителя от mongoDB (ако съществува) и се опитва да хешира паролата. Ако има съвпадение, сесията на потребителя се задава, съхранява се в базата данни на mongo и крайната точка връща
user
обект (използван за съхраняване в $rootScope, както беше споменато по-горе). - Всеки път, когато има достъп до други крайни точки, функциите първо се предават през
restrict
функция, която гарантира, че сесията съществува, преди да изпрати каквито и да е данни на клиента. Връща401
ако не съществува сесия, която след това се обработва от страна на Angular с помощта на този HTTP прихващач за деактивиране на$rootScope.user
и пренасочване към екрана за вход. - Когато потребителят щракне върху „излизане“ от страната на Angular, сесията се деактивира и се изтрива от mongo DB,
$rootScope.user
е зададено на null и потребителят се пренасочва обратно към началната страница.