Pelajari cara menangani otentikasi dengan Node menggunakan Passport.js

Dukung saya dengan membacanya dari sumber aslinya: ORIGINAL SOURCE

Pada artikel ini Anda akan mempelajari cara menangani otentikasi untuk server Node Anda menggunakan Passport.js. Artikel ini tidak mencakup otentikasi Frontend. Gunakan ini untuk mengkonfigurasi otentikasi Backend Anda (Buat token untuk setiap pengguna & lindungi rute).

Perlu diingat bahwa jika Anda mengalami kebuntuan pada langkah apa pun, Anda dapat merujuk ke repo GitHub ini .

Dalam artikel ini saya akan mengajari Anda hal-hal berikut:

  • Menangani rute yang dilindungi
  • Menangani token JWT
  • Menangani tanggapan yang tidak sah
  • Membuat API dasar
  • Membuat model & skema

pengantar

Apa itu Passport.js?

Paspor adalah middleware otentikasi untuk Node.js. Karena sangat fleksibel dan modular, Passport dapat dimasukkan secara diam-diam ke aplikasi web berbasis Express. Serangkaian strategi lengkap mendukung otentikasi menggunakan nama pengguna dan kata sandi, Facebook, Twitter, dan lainnya. Cari tahu lebih lanjut tentang Paspor di sini.

Tutorial

Membuat server node kami dari awal

Buat direktori baru dengan "app.js" inifile di dalam:

Kami akan menginstal nodemon untuk pengembangan lebih mudah.

dan kemudian kita akan menjalankan "app.js" kita dengannya.

$ nodemon app.js

Membuat model pengguna

Buat folder baru bernama "model",dan buat file "Users.js" di dalam folder itu.Di sinilah kita akan mendefinisikan "UsersSchema" kita. Kami akan menggunakan JWTdan Cryptountuk menghasilkan hashdan saltdari passwordstring yang diterima . Ini nantinya akan digunakan untuk memvalidasi pengguna.

Mari tambahkan model yang baru kita buat ke "app.js".

Tambahkan baris berikut ke file "app.js" Anda setelah mengonfigurasi Mongoose:

require('./models/Users');

Konfigurasikan Paspor

Buat folder baru "config" dengan file "passport.js" di dalamnya:

Dalam file ini, kami menggunakan metode validatePasswordyang kami tentukan diUser model. Berdasarkan hasil, kami mengembalikan keluaran yang berbeda dari Passport's LocalStrategy.

Mari hubungkan "passport.js" ke file "app.js" kita. Tambahkan baris berikut di bawah semuamodels :

require('./config/passport');

Rute dan opsi otentikasi

Buat folder baru bernama "routes" dengan file "auth.js" di dalamnya.

Dalam file ini kami menggunakan fungsi getTokenFromHeadersuntuk mendapatkan token JWT yang akan dikirim dari sisi klien di header permintaan . Kami juga membuat authobjek dengan optionaldan requiredproperti. Kami akan menggunakannya nanti di rute kami.

Di folder "routes" yang sama, buat file "index.js":

Kita sekarang membutuhkan folder "api" di dalam folder "routes", dengan file "index.js" di dalamnya.

Sekarang, mari buat file "users.js" yang kita butuhkan di "api / index.js".

Pertama, kita akan membuat rute autentikasi opsional‘/’ yang akan digunakan untuk pembuatan model baru (register).

router.post('/', auth.optional, (req, res, next) ...

Setelah itu, kami akan membuat rute autentikasi opsional lainnya ‘/login’. Ini akan digunakan untuk mengaktifkan konfigurasi paspor kami dan memvalidasi kata sandi yang diterima dengan email.

router.post('/login', auth.optional, (req, res, next) ...

Terakhir, kami akan membuat rute autentikasi yang diperlukan , yang akan digunakan untuk mengembalikan pengguna yang saat ini masuk. Hanya pengguna yang masuk (pengguna yang tokennya berhasil dikirim melalui header permintaan) yang memiliki akses ke rute ini.

router.get('/current', auth.required, (req, res, next) ...

Mari tambahkan folder "routes" ke "app.js".Tambahkan baris berikut di bawah paspor kamirequire :

app.use(require('./routes'));

Pengujian rute

Saya akan menggunakan Postmanuntuk mengirim permintaan ke server kami.

Server kami menerima badan berikut:

{ "user": { "email": String, "password": String } }

Membuat permintaan POST untuk membuat pengguna

Tubuh uji:

Tanggapan:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgxNTEsImlhdCI6MTUyNzcyNDE1MX0.4TWc1TzY6zToHx_O1Dl2I9Hf9krFTqPkNLHI5U9rn8c" } }

Kami sekarang akan menggunakan token ini dan menambahkannya ke "Header" kami di konfigurasi Postman.

And now let’s test our auth only route.

Creating a GET request to return the currently logged in user

Request URL:

GET //localhost:8000/api/users/current

Response:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgzMTgsImlhdCI6MTUyNzcyNDMxOH0.5UnA2mpS-_puPwwxZEb4VxRGFHX6qJ_Fn3pytgGaJT0" } }

Let’s try to do it without token in “Headers”.

Response:

The end

Thank you for going through this tutorial. If you notice any errors please report them to me. If you got stuck on any step, please refer to this GitHub repo.

You can contact me through:

  • erdeljac DOT antonio AT gmail.com
  • Linkedin

Check out my app SwipeFeed.