Sử dụng passport với sequelize và MySQL

Sequelize là một ORM Node. js dựa trên promise. Nó hoàn toàn có thể được sử dụng với PostgreSQL, MySQL, MariaDB, SQLite và MSSQL. Trong hướng dẫn này, chúng tôi sẽ tiến hành xác nhận cho người dùng ứng dụng web. Và chúng tôi sẽ sử dụng Passport, middleware xác nhận thông dụng cho Node, cùng với Sequelize và MySQL để triển khai ĐK người dùng và đăng nhập .

Bắt đầu

Đảm bảo bạn đã thiết lập những phần sau trên máy của mình :

  • Node
  • MySQL

Đối với hướng dẫn này, chúng tôi sẽ sử dụng Node. js cùng với Express, vì thế chúng tôi sẽ liên tục khởi đầu setup những gì chúng tôi cần .

Bước 1: Tạo file package.json

Tạo thư mục cho ứng dụng của bạn. Bên trong thư mục này, chạy lệnh này từ terminal hoặc command prompt của bạn:

Điều này khởi tạo trình quản trị nhờ vào npm. Điều này sẽ trình diễn một loạt những lời nhắc mà chúng tôi sẽ nhanh gọn đi qua .

  • Nhập tên ứng dụng của bạn mà không có dấu cách và nhấn Enter cho ‘name’.
  • Nhấn Enter cho ‘phiên bản’.
  • Đối với ‘description’, trong hướng dẫn này, chúng ta sẽ gõ “Using Passport with Sequelize and MySQL” làm mô tả và nhấn Enter. Điều này cũng có thể được để trống.
  • Đối với ‘entry point (index.js)’, gõ server.js và nhấn Enter.
  • Đối với ‘lệnh kiểm tra’, nhấn Enter.
  • Đối với ‘kho git’, bạn có thể nhập repo git nơi ứng dụng của bạn cư trú nếu bạn có hoặc chỉ cần nhấn Enter để để trống trường này.
  • Đối với ‘Từ khóa’, nhấn Enter.
  • Đối với ‘tác giả’, nhấn Enter hoặc nhập tên của bạn trước khi thực hiện điều đó.
  • Đối với ‘giấy phép’, nhấn Enter.
  • Đối với ‘(Đây có phải là không)’, điều này cho bạn thấy những gì package.json của bạn sẽ như thế nào. Nhập Có và nhấn Enter.

Bước 2: Cài đặt phụ thuộc

Các nhờ vào chính cho hướng dẫn này là :

  • Express
  • Sequelize
  • MySQL
  • Passport
  • Passport Chiến lược địa phương
  • Phân tích cú pháp nội dung
  • Express Section
  • Bcrypt Nodejs
  • Express Handlebars cho các view

Để thiết lập chúng, từ command prompt hoặc terminal của bạn, hãy chạy câu lệnh sau .
Nếu bạn đang sử dụng Git cho dự án Bất Động Sản này :
Trong thư mục dự án Bất Động Sản của bạn, hãy tạo file. gitignore .
Thêm dòng này vào file. gitignore .

node_modules

Bước 3: Thiết lập ứng dụng

Bây giờ, tất cả chúng ta tạo một file sever. Đây sẽ là file chính được gọi khi bạn nhập như sau :
File này chạy ứng dụng. Bạn cũng hoàn toàn có thể chạy ứng dụng bằng cách nhập node server.js .
Sau đó, trong thư mục dự án Bất Động Sản của chúng tôi, chúng tôi tạo một file mới và đặt tên file này là server.js .
Bên trong file server.js, chúng tôi thêm vào như sau :
Dòng tiên phong gán mô-đun biểu lộ cho một biến biểu lộ. Sau đó, chúng tôi khởi tạo nhanh và đặt tên cho nó là biến : ứng dụng .
Sau đó, chúng tôi làm cho ứng dụng nghe trên cổng 5000. Bạn hoàn toàn có thể chọn bất kể số cổng không tính tiền nào trên máy tính của mình .

Tiếp theo, chúng ta gọi hàm app.get() express để trả lời với “Welcome to Passport with Sequelize” khi một yêu cầu GET được gửi tới “/”.

Để kiểm tra trên máy tính của bạn, hãy chạy nó từ bên trong thư mục dự án Bất Động Sản của bạn :
Nếu bạn thấy dòng chữ ” Welcome to Passport with Sequelize ” khi bạn truy vấn http://localhost:5000/ sau đó xin chúc mừng ! Nếu không, hãy kiểm tra xem bạn đã làm mọi thứ đúng chuẩn như được viết ở trên chưa .
Tiếp theo, chúng tôi nhập một số ít mô-đun chúng tôi cần, như passport, phiên thanh toán giao dịch và nghiên cứu và phân tích cú pháp nội dung .

Sau var app = express() chúng ta thêm các dòng sau:

Trong hai dòng tiên phong, chúng tôi nhập mô-đun passport và phiên bộc lộ, cả hai đều cần giải quyết và xử lý xác nhận .
Sau đó, chúng tôi nhập mô-đun nghiên cứu và phân tích cú pháp nội dung. Thao tác này trích xuất hàng loạt phần nội dung của một nhu yếu đến và hiển thị nó theo một định dạng dễ thao tác hơn. Trong trường hợp này, chúng tôi sẽ sử dụng định dạng JSON .
Để ứng dụng của chúng tôi sử dụng trình nghiên cứu và phân tích cú pháp nội dung, chúng tôi thêm những dòng này vào một số ít khoảng trống bên dưới những dòng nhập :
Tiếp theo, chúng tôi khởi tạo passport và phiên thanh toán giao dịch và phiên passport và thêm cả hai làm middleware. Chúng tôi làm điều này bằng cách thêm những dòng này 1 số ít khoảng chừng trắng sau dòng nhập bodyParser .
Chúng tôi sẽ mở màn thao tác trên xác nhận thực tiễn ngay giờ đây .
Chúng tôi sẽ triển khai việc này theo bốn bước :

  • Thiết lập Sequelize với MySQL.
  • Tạo model User.
  • Thiết lập view.
  • Viết một chiến lược passport.

1. Thiết lập Sequelize với MySQL

Đầu tiên, chúng ta tạo một database trong MySQL. Đặt nó làm tên ưa thích của bạn. Phục vụ cho mục đích của hướng dẫn này, chúng ta hãy tạo một database có tên là sequelize_passport trong MySQL.

Sau đó, chúng tôi thiết lập thông số kỹ thuật để giải quyết và xử lý những thông tin DB.
Trước tiên, hãy nhập mô-đun dot-env để giải quyết và xử lý những biến môi trường tự nhiên .
Chạy nó trong thư mục gốc dự án Bất Động Sản của bạn :
Sau đó, chúng tôi nhập nó vào file sever chính, server.js, ngay bên dưới những mục nhập khác .
Tiếp theo, tất cả chúng ta tạo một file trong thư mục dự án Bất Động Sản và đặt tên nó là. env .
Bước tiếp theo cần làm là tùy chọn nếu bạn không sử dụng Git :
Chúng tôi sẽ thêm file. env vào file. gitignore của bạn .
File. gitignore của bạn sẽ trông giống như sau :
Sau đó, tất cả chúng ta thêm môi trường tự nhiên của tất cả chúng ta vào file. env bằng cách thêm dòng này :

NODE_ENV = 'phát triển'

Sau đó, tất cả chúng ta tạo một file tin config.json sẽ được sử dụng bởi Sequelize để quản trị những môi trường tự nhiên khác nhau .

Điều đầu tiên cần làm là tạo một thư mục có tên là config trong thư mục dự án của chúng tôi. Bên trong thư mục này, chúng ta tạo một file tin config.json. File này nên được bỏ qua nếu bạn đang đẩy đến một kho lưu trữ. Để thực hiện việc này, hãy thêm mã sau vào .gitignore của bạn:

config/config.json

Sau đó, tất cả chúng ta thêm vào đoạn mã sau vào file config.json của tất cả chúng ta .
Hãy nhớ sửa chữa thay thế những giá trị trong khối tăng trưởng ở trên bằng những chi tiết cụ thể xác nhận database của bạn .
Tiếp theo, chúng tôi setup sequelize với npm. Để thực thi việc này, hãy chạy lệnh sau trong thư mục gốc của dự án Bất Động Sản :

Bây giờ là lúc tạo thư mục mô hình.

Đầu tiên, chúng ta tạo một thư mục có tên app trong thư mục dự án của chúng ta.

Bên trong thư mục app, chúng tôi tạo một thư mục mới có tên là models và tạo một file mới có tên là index.js trong thư mục models .
Bên trong file index.js, chúng tôi thêm vào mã bên dưới .
File này được sử dụng để nhập toàn bộ những quy mô chúng tôi đặt vào thư mục quy mô và xuất chúng .
Để kiểm tra toàn bộ là tốt, chúng tôi thêm điều này vào file server.js của chúng tôi .
Ở đây, chúng tôi đang nhập những quy mô, và sau đó gọi công dụng đồng điệu hóa Sequelize .
Chạy cái này để xem toàn bộ có tốt không :
Nếu bạn nhận được thông tin ” Trang web đang hoạt động giải trí Tốt đẹp ! Cơ sở tài liệu trông ổn “, sau đó bạn đã thiết lập Sequelize thành công xuất sắc .
Nếu không, hãy đi cẩn trọng qua những bước ở trên và cố gắng nỗ lực gỡ lỗi sự cố với trợ giúp .

2. Tạo Mô hình Người dùng

Điều tiếp theo tất cả chúng ta sẽ làm là tạo ra Mã Sản Phẩm User, về cơ bản là bảng người dùng. Điều này sẽ chứa thông tin người dùng cơ bản .
Trong thư mục models của chúng tôi, chúng tôi tạo một file và đặt tên là user.js. Đường dẫn không thiếu cho file này phải là app / models / user.js .
Mở file user.js và thêm mã sau :
Bây giờ chạy :

Bạn sẽ thấy quen thuộc “Site is live. Nice! Database looks fine.” thông điệp. Điều này có nghĩa rằng các mô hình Sequelize của chúng tôi đã được đồng bộ hóa thành công và nếu bạn kiểm tra database của mình, bạn sẽ thấy bảng người dùng với các cột được chỉ định hiện tại.

3: Thiết lập view

Trước tiên, hãy tạo view để ĐK và liên kết nó .
Điều tiên phong cần làm là nhập khẩu mô-đun tay lái nhanh mà chúng tôi sử dụng cho những view trong hướng dẫn này .
Thêm dòng này vào file mở màn chính, server.js .

var exphbs = require ('express-handlebars')

Khối nhập của bạn sẽ trông như thế này vào thời gian này .
Tiếp theo, chúng tôi thêm những dòng sau vào file server.js của chúng tôi .
Bây giờ, trong thư mục app của chúng tôi, chúng tôi tạo ba thư mục có tên là views, controllers và routes .
Trong thư mục views, tất cả chúng ta tạo một file có tên signup.hbs và thêm vào đoạn code bên dưới vào nó .
Sau đó trong thư mục controllers của tất cả chúng ta, tất cả chúng ta tạo một file mới và đặt tên nó là authcontroller.js .
Trong file này, chúng tôi thêm vào controller sau cho route ĐK mà chúng tôi sẽ tạo trong giây lát .
Tiếp theo, chúng tôi tạo một route để ĐK. Trong thư mục routes, tất cả chúng ta tạo một file mới có tên auth.js và sau đó, trong file này, tất cả chúng ta nhập trình điều khiển và tinh chỉnh auth và xác lập tuyến ĐK .
Bây giờ, chúng tôi sẽ nhập tuyến đường này trong server.js của chúng tôi và chuyển ứng dụng dưới dạng đối số .
Trong sever, sau khi nhập quy mô, hãy thêm những dòng sau :

Chạy này:

Xem thêm: Chủ đầu tư tiếng Anh là gì? Bạn đã biết hay chưa??

Bây giờ, hãy truy vấn http://localhost:5000/ ĐK và bạn sẽ thấy biểu mẫu ĐK .
Hãy lặp lại những bước cho biểu mẫu đăng nhập. Như trước đây, chúng tôi sẽ tạo một file có tên signin.hbs trong thư mục lượt xem của chúng tôi và thêm vào mã HTML sau vào đó :
Sau đó, thêm một bộ tinh chỉnh và điều khiển cho đăng nhập trong app / controllers / authcontroller.js .
Sau đó, trong app / routes / auth.js, chúng tôi thêm route cho đăng nhập như sau :

app.get ('/ signin', authController.signin);

Bây giờ khi bạn chạy :
và truy vấn http://localhost:5000/signin/, bạn sẽ thấy biểu mẫu đăng nhập .
Bước ở đầu cuối và chính là viết những kế hoạch passport của chúng tôi .

4. Viết một chiến lược passport

Trong app / config, tất cả chúng ta tạo một thư mục mới có tên là passport .
Sau đó trong ứng dụng app / config / passport mới của chúng tôi, chúng tôi tạo một file mới và đặt tên là passport.js. File này sẽ chứa những kế hoạch passport của chúng tôi .
Trong passport.js, chúng tôi sẽ sử dụng Model User và passport .
Đầu tiên, chúng tôi nhập bcrypt mà chúng tôi cần để bảo mật thông tin mật khẩu .

var bCrypt = require ('bcrypt-nodejs');

Sau đó, tất cả chúng ta thêm một module.exports như sau :
Bên trong block này, chúng tôi khởi tạo kế hoạch passport địa phương và Mã Sản Phẩm User sẽ được chuyển thành đối số. Dưới đây là cách chúng tôi triển khai việc này :
Sau đó, chúng tôi xác lập kế hoạch tùy chỉnh của mình với ví dụ về LocalStrategy như sau :
Bây giờ chúng tôi đã công bố những gì nhu yếu ( req ) nghành nghề dịch vụ của chúng tôi usernameField và passwordField ( biến passport ) được .
Biến passReqToCallback ở đầu cuối được cho phép chúng tôi chuyển hàng loạt nhu yếu đến cuộc gọi lại, đặc biệt quan trọng có ích khi ĐK .
Sau dấu phẩy ở đầu cuối, tất cả chúng ta thêm hàm gọi lại này .
Trong công dụng này, chúng tôi sẽ giải quyết và xử lý tàng trữ chi tiết cụ thể của người dùng .
Đầu tiên, tất cả chúng ta thêm hàm tạo mật khẩu băm của tất cả chúng ta bên trong hàm gọi lại .
Sau đó, sử dụng Mã Sản Phẩm User Sequelize mà chúng tôi đã khởi tạo trước đó là Người dùng, chúng tôi kiểm tra xem liệu người dùng đã sống sót hay chưa và liệu chúng tôi có thêm họ không .

User.create() là một phương thức Sequelize để thêm các mục mới vào database. Lưu ý rằng các giá trị trong đối tượng dữ liệu được lấy từ đối tượng req.body chứa đối tượng đầu vào từ biểu mẫu đăng ký của chúng tôi.

Passport. js của bạn sẽ trông giống như sau :
Bây giờ tất cả chúng ta sẽ nhập kế hoạch trong server.js .
Để thực thi điều này, chúng tôi thêm những dòng này bên dưới những tuyến nhập trong server.js .
Server. js của bạn sẽ trông như thế này vào lúc này :
Bây giờ chúng tôi sẽ thực sự vận dụng kế hoạch cho tuyến ĐK / của chúng tôi .
Đây là cách chúng tôi làm điều đó :
Trước tiên, chúng tôi chuyển đến app / routes / auth.js và thêm tuyến đường để đăng lên ĐK như thế này .
Vì tất cả chúng ta cần passport, tất cả chúng ta cần chuyển nó cho chiêu thức này. Chúng tôi hoàn toàn có thể nhập passport trong tập lệnh này hoặc chuyển nó từ server.js. Hãy làm điều sau .
Sửa đổi hàm được xuất trong ứng dụng file app / routes / auth.js này để có passport làm thông số kỹ thuật. Mã trong app / routes / auth.js sẽ giống như sau khi bạn sửa đổi .
Sau đó trong server.js, chúng tôi sửa đổi những tuyến nhập và thêm passport làm đối số như sau :

var authRoute = require('./app/routes/auth.js')(app,passport);

Bây giờ, hãy truy vấn URL ĐK http://localhost:5000/signup/ và thử ĐK .

Khi bạn cố gắng đăng ký, bạn sẽ gặp lỗi “Failed to serialize user into session“. Điều này là do passport phải lưu một ID người dùng trong phiên và nó sử dụng điều này để quản lý truy xuất chi tiết người dùng khi cần.

Để xử lý yếu tố này, chúng tôi sẽ tiến hành cả hai tính năng serialize và deserialize của passport trong file app / config / passport / passport.js của chúng tôi .

Đầu tiên chúng ta thêm hàm serialize. Trong chức năng này, chúng tôi sẽ lưu user id vào phiên.

Để làm điều này, chúng tôi thêm những dòng sau đây dưới sự khởi tạo của kế hoạch địa phương .
Tiếp theo, chúng tôi triển khai công dụng deserialize. Thêm hàm ngay bên dưới hàm tuần tự hóa .

Trong hàm deserialize ở trên, chúng ta sử dụng lời hứa Sequelize findById để lấy người dùng, và nếu thành công, một cá thể của mô hình Sequelize được trả về. Để có được đối tượng User từ thể hiện này, chúng ta sử dụng chức năng Sequelize getter như sau: user.get().

Bây giờ chạy lại :
Và cố gắng nỗ lực ĐK. Hoan hô nếu bạn có ” Không thể GET / bảng điều khiển và tinh chỉnh ” ! Nó có nghĩa là xác nhận của chúng tôi đã thành công xuất sắc. Hãy nhớ rằng chúng tôi đã chuyển hướng đến / trang tổng quan trong phương pháp passport của chúng tôi. hủy xác nhận trong những tuyến đường / auth.js .
Bây giờ tất cả chúng ta hãy liên tục thêm route đó. Sau đó, thêm middleware để bảo vệ trang chỉ hoàn toàn có thể được truy vấn khi người dùng đăng nhập vào session .
Trong thư mục app / views của chúng tôi, chúng tôi tạo file mới có tên dashboard.hbs và thêm mã HTML sau vào thư mục đó .
Trong những route / auth.js, tất cả chúng ta thêm dòng này bên trong khối module.exports :

app.get('/dashboard',authController.dashboard);

Tiếp theo, tất cả chúng ta đi đến app / controllers / authController. js và thêm bộ điều khiển và tinh chỉnh bảng điều khiển và tinh chỉnh .
AuthController. js của bạn sẽ trông như thế này :
Bây giờ, hãy chạy lại ứng dụng và thử ĐK bằng địa chỉ email khác với địa chỉ bạn đã sử dụng trước đó. Bạn sẽ được chuyển hướng thích hợp đến route / dashboard .
Nhưng / dashboard không phải là route được bảo vệ, điều đó có nghĩa là ngay cả khi người dùng chưa đăng nhập, họ hoàn toàn có thể nhìn thấy nó. Chúng tôi không muốn điều này, vì thế chúng tôi sẽ thêm một route / logout để đăng nhập người sử dụng, và sau đó bảo vệ những tuyến đường và kiểm tra những gì chúng tôi đã làm .
Làm thôi nào :
Trong routes / auth.js, chúng tôi thêm dòng này :

app.get('/logout',authController.logout);

Sau đó, tất cả chúng ta thêm bộ tinh chỉnh và điều khiển trong app / controllers / authController. js .
Bây giờ hãy chạy lại ứng dụng và ĐK bằng một địa chỉ email khác .
Sau đó, hãy truy vấn http://localhost:5000/logout để đăng xuất người dùng. Bây giờ hãy truy vấn http://localhost:5000/dashboard .
Bạn sẽ nhận thấy rằng nó là khá dễ tiếp cận. Hãy thêm một middleware tùy chỉnh để bảo vệ route đó .
Để làm điều này, tất cả chúng ta mở app / routes / auth.js và thêm hàm này vào module.exports, bên dưới tổng thể những dòng code khác .
Sau đó, chúng tôi sửa đổi handler của route trong dashboard để trông giống như sau :

app.get('/dashboard',isLoggedIn, authController.dashboard);

Bây giờ, khi bạn chạy lại ứng dụng và thử truy vấn trang dashboard và bạn chưa đăng nhập, bạn sẽ được chuyển hướng đến trang đăng nhập .
Whew ! Đã đến lúc tiến hành phần ở đầu cuối : đăng nhập .
Trước tiên, chúng tôi sẽ thêm một kế hoạch địa phương mới để đăng nhập trong app / config / passport / passport.js .

Trong chiến lược này, hàm isValidPassword so sánh mật khẩu được nhập với phương thức so sánh bCrypt vì chúng tôi đã lưu mật khẩu bằng bcrypt.

Nếu cụ thể đúng mực, người dùng của chúng tôi sẽ đăng nhập .
Bây giờ hãy chuyển đến tuyến đường / auth.js và thêm tuyến đường để đăng lên / đăng nhập .
routes / auth.js của bạn sẽ trông như thế này khi bạn hoàn tất .

Bây giờ hãy chạy ứng dụng và thử đăng nhập. Bạn sẽ có thể đăng nhập bằng bất kỳ chi tiết nào bạn đã sử dụng khi đăng ký và bạn sẽ được chuyển đến http://localhost:5000/dashboard/.

Xin chúc mừng nếu bạn đã đi hết hướng dẫn này ! Chúng tôi đã sử dụng thành công xuất sắc Sequelize và Passport với database MySQL .
Code rất đầy đủ cho hướng dẫn này hoàn toàn có thể được tìm thấy trên GitHub .

Tổng kết

Điều này kết thúc hướng dẫn của chúng tôi về việc sử dụng Passport để xác nhận người dùng với Sequelize và MySQL. Sequelize là một ORM thực sự hữu dụng để giải quyết và xử lý MySQL khi sử dụng Node. Cá nhân tôi thấy nó rất hữu dụng và bạn chắc như đinh nên xem xét việc sử dụng nó trong ứng dụng Node-MySQL tiếp theo của mình .

Tài liệu tham khảo

Rate this post
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments