Ответ 1
В итоге я объединил свой оригинальный рабочий процесс с примером Express auth, увиденным здесь. Это выглядит так:
- Когда пользователь изначально загружает приложение, HTTP-вызов выполняется в конечную точку Express, которая проверяет, существует ли уже сеанс для пользователя. Если это так, пользователь хранится в
$rootScope
и считается зарегистрированным. - В любое время, когда изменяется маршрут AngularJS, открывается одна и та же конечная точка. Защита маршрута была указана таким образом, как описано здесь здесь. Если конечная точка когда-либо возвращается, что сеанс не существует,
$rootScope.user
не устанавливается (если это необходимо), и пользователь перенаправляется на страницу входа. - Когда форма входа обрабатывается, она отправляется в конечную точку Express. Конечная точка извлекает пользователя из mongoDB (если он существует) и пытается хешировать пароль. Если это совпадение, пользовательский сеанс установлен, сохраняется в БД mongo, а конечная точка возвращает объект
user
(используемый для хранения в $rootScope, как упоминалось ранее). - В любое время, когда будут доступны какие-либо дополнительные конечные точки, функции сначала передаются через функцию
restrict
, которая гарантирует, что сеанс существует до отправки каких-либо данных клиенту. Он возвращает401
, если сеанс не существует, который затем обрабатывается со стороны Angular, используя этот HTTP-перехватчик, чтобы отключить$rootScope.user
и перенаправить на экран входа в систему. - Когда пользователь нажимает "выйти из системы" на стороне Angular, сеанс отключается и удаляется из базы данных mongo,
$rootScope.user
имеет значение null, а пользователь перенаправляется обратно на главную страницу.