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
$rootScopei 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.usernie 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
userobiekt (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
restrictfunkcja zapewniająca istnienie sesji przed wysłaniem jakichkolwiek danych do klienta. Zwraca401jeś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.useri przekieruj do ekranu logowania. - Kiedy użytkownik kliknie „wyloguj się” po stronie Angulara, sesja zostanie anulowana i usunięta z bazy danych mongo,
$rootScope.userjest ustawiona na null, a użytkownik jest przekierowywany z powrotem na stronę główną.