Skończyło się na połączeniu mojego oryginalnego przepływu pracy z przykładem uwierzytelniania Express, widzianym tutaj . Wygląda to następująco:
- Gdy użytkownik początkowo ładuje aplikację, wykonywane jest wywołanie http do punktu końcowego Express, które sprawdza, czy sesja już istnieje dla użytkownika. Jeśli tak, użytkownik jest przechowywany w
$rootScope
i uważane za zalogowane. - Za każdym razem, gdy zmienia się trasa AngularJS, uzyskuje się dostęp do tego samego punktu końcowego. Ochrona trasy została określona w sposób podobny do opisanego tu
. Jeśli punkt końcowy kiedykolwiek zwróci, że żadna sesja nie istnieje,
$rootScope.user
nie jest ustawiona (jeśli trzeba), a użytkownik zostaje przekierowany na stronę logowania. - Gdy formularz logowania jest przetwarzany, jest wysyłany do punktu końcowego Express. Punkt końcowy pobiera użytkownika z bazy danych mongoDB (jeśli istnieje) i próbuje zaszyfrować hasło. Jeśli to pasuje, sesja użytkownika jest ustawiana, przechowywana w mongo DB, a punkt końcowy zwraca
user
obiekt (używany do przechowywania w $rootScope, jak wspomniano wcześniej). - Za każdym razem, gdy uzyskiwany jest dostęp do dalszych punktów końcowych, funkcje są najpierw przekazywane przez
restrict
funkcja zapewniająca istnienie sesji przed wysłaniem jakichkolwiek danych do klienta. Zwraca401
jeśli nie istnieje żadna sesja, która jest następnie obsługiwana po stronie Angulara przy użyciu tego przechwytywacza HTTP aby wyłączyć$rootScope.user
i przekieruj do ekranu logowania. - Kiedy użytkownik kliknie „wyloguj się” po stronie Angulara, sesja zostanie anulowana i usunięta z bazy danych mongo,
$rootScope.user
jest ustawiona na null, a użytkownik jest przekierowywany z powrotem na stronę główną.