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
$rootScope
dan 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.user
tidak 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
user
objek (digunakan untuk menyimpan di $rootScope seperti yang disebutkan sebelumnya). - Setiap kali titik akhir lebih lanjut diakses, fungsi-fungsi tersebut pertama-tama dilewatkan melalui
restrict
fungsi yang memastikan bahwa ada sesi sebelum mengirim data apa pun ke klien. Ini mengembalikan401
jika tidak ada sesi, yang kemudian ditangani di sisi Angular menggunakan interseptor HTTP ini untuk menghapus$rootScope.user
dan arahkan kembali ke layar login. - Saat pengguna mengklik "log out" di sisi Angular, sesi tidak disetel dan dihapus dari DB mongo,
$rootScope.user
disetel ke null, dan pengguna diarahkan kembali ke halaman depan.