Saya akhirnya menggabungkan alur kerja asli saya dengan contoh autentikasi Express, lihat di sini . Ini adalah sebagai berikut:
- Saat pengguna pertama kali memuat aplikasi, panggilan http dibuat ke titik akhir Ekspres yang memeriksa apakah sesi sudah ada untuk pengguna. Jika demikian, pengguna disimpan di
$rootScopedan dianggap masuk. - Setiap kali rute AngularJS berubah, titik akhir yang sama diakses. Perlindungan rute ditentukan dengan cara yang mirip dengan yang dijelaskan di sini
. Jika titik akhir mengembalikan bahwa tidak ada sesi,
$rootScope.usertidak disetel (jika perlu), dan pengguna diarahkan ke halaman login. - Saat formulir login diproses, formulir tersebut akan diposting ke titik akhir Ekspres. Titik akhir mengambil pengguna dari mongoDB (jika ada), dan mencoba untuk meng-hash kata sandi. Jika cocok, sesi pengguna diatur, disimpan dalam DB mongo, dan titik akhir mengembalikan
userobjek (digunakan untuk menyimpan di $rootScope seperti yang disebutkan sebelumnya). - Setiap kali titik akhir lebih lanjut diakses, fungsi-fungsi tersebut pertama-tama dilewatkan melalui
restrictfungsi yang memastikan bahwa ada sesi sebelum mengirim data apa pun ke klien. Ini mengembalikan401jika tidak ada sesi, yang kemudian ditangani di sisi Angular menggunakan interseptor HTTP ini untuk menghapus$rootScope.userdan arahkan kembali ke layar login. - Saat pengguna mengklik "log out" di sisi Angular, sesi tidak disetel dan dihapus dari DB mongo,
$rootScope.userdisetel ke null, dan pengguna diarahkan kembali ke halaman depan.