MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Architettura per il sistema di accesso su stack MEAN?

Ho finito per combinare il mio flusso di lavoro originale con l'esempio di autenticazione di Express, visto qui . È il seguente:

  • Quando l'utente carica inizialmente l'app, viene effettuata una chiamata http a un endpoint Express che verifica se esiste già una sessione per l'utente. In tal caso, l'utente viene archiviato in $rootScope e considerato connesso.
  • Ogni volta che cambia la route di AngularJS, si accede allo stesso endpoint. La protezione del percorso è stata specificata in modo simile a quello descritto qui . Se l'endpoint restituisce che non esiste alcuna sessione, $rootScope.user non è impostato (se necessario) e l'utente viene reindirizzato alla pagina di accesso.
  • Quando il modulo di accesso viene elaborato, viene inviato a un endpoint Express. L'endpoint recupera l'utente da mongoDB (se esiste) e tenta di eseguire l'hashing della password. Se è una corrispondenza, la sessione dell'utente viene impostata, memorizzata nel DB mongo e l'endpoint restituisce l'user oggetto (usato per memorizzare in $rootScope come menzionato in precedenza).
  • Ogni volta che si accede ad altri endpoint, le funzioni vengono prima passate attraverso il restrict funzione che garantisce l'esistenza di una sessione prima di inviare qualsiasi dato al client. Restituisce un 401 se non esiste una sessione, che viene quindi gestita sul lato angolare utilizzando questo intercettore HTTP per annullare l'impostazione di $rootScope.user e reindirizza alla schermata di accesso.
  • Quando l'utente fa clic su "disconnetti" sul lato Angular, la sessione viene annullata ed eliminata dal DB mongo, $rootScope.user è impostato su null e l'utente viene reindirizzato alla prima pagina.