User Authentication API với PassportJS và ExpressJS

Tram Ho

Hôm nay bắt đầu vọc Nodejs, thấy khá hay và thú vị nên minhf xin chia sẽ bài viết này, hướng dẫn cho các bạn mới làm quen với nodejs như mình.
Mục đích là tạo web cơ bản với chức năng signup, login, logout cho user nhé, và tất nhiên bạn cần có kiến thức về Nodejs cơ bản, cũng như web cơ bản.

Setup môi trường

  1. Tạo folder dự án:
  • Ở đây mình sẽ dùng Express generator để dựng base cũng như cấu trúc folder cho demo này nhé :3
  • Đầu tiên bạn cần cài đặt npm install -g [email protected]
  • Và chạy express passport-demo để khởi tạo demo.
  • Cùng ngó qua folder tree nhé, cũng khá là cơ bản rồi, từ từ mình sẽ đi chi tiết nhé
  1. Kết nối và sử dụng Mongodb:
  • Ở đây mình sẽ sử dụng ORM là Mongoose cho Mongo nhé, nếu bạn còn chưa có kinh nghiệm hay kiến thức về nó hảy đọc thêm ở đây .
  • Bạn cần install sẵn mongodb nhé.
  • và cài đặt mongoose để sử dụng: npm install mongoose.
  1. Install passport
  • npm install passport passport-local
  • Passport hỗ trợ rất nhiều phương thức authen như với google, facebook, twiter… ở đây mình chỉ dùng passport-local để authen user thôi nhé, bạn có thể tham khảo thêm tại http://www.passportjs.org/docs/

Xoắn tay lên và code

  1. Đầu tiên tạo model user trước nhỉ:
  • Đi thẳng vào code nhes
  • Set up cho mongoose:
  • app.js

  • Tạo model user
  • models/user.js

Mình có comment lại trong code để giải thích khá kĩ rồi, nếu có thắc mắc thì cứ comment nhé, mình sẽ cố gắng giải thích nếu biết. =))
2. Config cho passport:

  • Đây là file config passport của mình: passport.js

  • Ở trên nếu bạn nào chưa hiểu cách mình dùng hàm verifed (done) thì xem qua đoạn code này của passport local nhé, có thắc mắc có thể cmt bên duới mình sẽ cố gắng giải đáp.

-Link github cho bạn nào muốn đọc hiểu cách hoạt động https://github.com/jaredhanson/passport-local/blob/master/lib/strategy.js
3. Tạo route :

  • Signup

  • Login:

  • Logout: Cái này thì chắc không cần api nữa nhỉ, ở client ta chỉ việc xóa token có được khi login là xong.
  • Bước cuối cùng cũng khá là quan trọng là kiểm tra người dùng đang login nhỉ, thông thường thì phỉa client sẽ sử dụng token có được sau khi login để gửi kem trong header
    Mình sẽ có file Auth.js như sau

  • Express-jwt là middleware giúp ta validate lại token jwt và set req.user từ token lấy ra được, các bạn xem thêm tại https://github.com/auth0/express-jwt
  • Và bây giờ trong route bạn cần kiểm tra user nào login chỉ việc import và thêm callback auth.required để check nhé, mình sử dụng userProperty: ‘payload’ nên muốn lấy ra payload mã hóa trong jwt ta chỉ việc: req.payload.id

Tổng kết

  • Trên đây là demo app api cơ bản để tạo chức năng đăng ký, đăng nhập cho người dùng, bài viết khá dài, mình viết còn khá nhiều thiếu xót mong mọi người thông cảm, hi vọng trong bài viết sau mình sẽ cố gắng giải thích kĩ hơn và viết đầy đủ cả client side cho các bạn dễ hiểu hơn.
  • Nếu có gì sai xót mong các bạn comment để cùng nhau trao đổi nhé, cảm ơn m.n
Chia sẻ bài viết ngay

Nguồn bài viết : Viblo