Tôi đang bắt đầu Chuỗi CodeLab, trong đó tôi sẽ xây dựng thứ gì đó thú vị và chia sẻ với cộng đồng
Hôm nay, chúng tôi sẽ triển khai API xác thực trong Node bằng JWT, express và MongoDB
Tôi khuyên bạn nên theo dõi mục lục và đừng bỏ lỡ bất kỳ bước nào. Tôi sẽ cung cấp liên kết mã ứng dụng đầy đủ ở cuối
Mục lục
1. Giới thiệu
Xác thực - Đó là một quá trình xác định danh tính người dùng
Xác thực người dùng bao gồm nhiều bước khác nhau, vui lòng xem sơ đồ này để biết thêm. Chúng tôi sẽ sử dụng quy trình này để xây dựng hệ thống xác thực trong ứng dụng của mình
2. điều kiện tiên quyết
Bạn nên có kiến thức trước về
npm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
3, npm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
4. Kiến thức về cú pháp ES6 là một lợi thế. Và, cuối cùng nodejs sẽ được cài đặt trên hệ thống của bạn3. Các gói yêu cầu
Bạn sẽ cần các gói 'npm' sau đây
bày tỏ
Express là một Node tối thiểu và linh hoạt. js khung ứng dụng web cung cấp một bộ tính năng mạnh mẽ cho các ứng dụng web và di độngtrình xác nhận nhanh
Để Xác thực dữ liệu nội dung trên máy chủ trong khung nhanh, chúng tôi sẽ sử dụng thư viện này. Đó là thư viện xác thực dữ liệu phía máy chủ. Vì vậy, ngay cả khi người dùng độc hại bỏ qua xác minh phía máy khách, thì quá trình xác thực dữ liệu phía máy chủ sẽ bắt được và đưa ra lỗitrình phân tích nội dung
Đó là phần mềm trung gian
4 để phân tích dữ liệu nội dungnpm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
bcryptjs
Thư viện này sẽ được sử dụng để băm mật khẩu và sau đó lưu trữ nó vào cơ sở dữ liệu. Bằng cách này, ngay cả quản trị viên ứng dụng cũng không thể truy cập vào tài khoản của người dùngjsonwebtoken
jsonwebtoken sẽ được sử dụng để mã hóa tải trọng dữ liệu của chúng tôi khi đăng ký và trả lại mã thông báo. Chúng tôi có thể sử dụng mã thông báo đó để xác thực chính mình với các trang được bảo mật như bảng điều khiển. Cũng sẽ có một tùy chọn để đặt tính hợp lệ của các mã thông báo đó, vì vậy bạn có thể chỉ định khoảng thời gian mà mã thông báo đó sẽ tồn tạicầy mangut
Mongoose là một công cụ mô hình hóa đối tượng MongoDB được thiết kế để hoạt động trong môi trường không đồng bộ. Mongoose hỗ trợ cả lời hứa và cuộc gọi lại
4. Bắt đầu dự án
Chúng tôi sẽ bắt đầu bằng cách tạo một dự án nút. Vì vậy, hãy tạo một thư mục mới với tên 'node-auth' và làm theo các bước bên dưới. Tất cả các tệp dự án phải nằm trong thư mục 'nút-auth'
npm init
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
npm init sẽ hỏi bạn một số thông tin cơ bản về dự án. Bây giờ, bạn đã tạo dự án nút, đã đến lúc cài đặt các gói cần thiết. Vì vậy, hãy tiếp tục và cài đặt các gói bằng cách chạy lệnh bên dưới
npm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bây giờ, hãy tạo một chỉ mục tệp. js và thêm mã này
// File : index.js
const express = require["express"];
const bodyParser = require["body-parser"];
const app = express[];
// PORT
const PORT = process.env.PORT || 4000;
app.get["/", [req, res] => {
res.json[{ message: "API Working" }];
}];
app.listen[PORT, [req, res] => {
console.log[`Server Started at PORT ${PORT}`];
}];
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Nếu bạn gõ
npm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
6 trong thiết bị đầu cuối, máy chủ sẽ bắt đầu tại CỔNG 4000Bạn đã thiết lập thành công ứng dụng ứng dụng NodeJS của mình. Đã đến lúc thiết lập cơ sở dữ liệu để thêm nhiều chức năng hơn
5. Thiết lập cơ sở dữ liệu MongoDB
Chúng tôi sẽ sử dụng Cơ sở dữ liệu MongoDB để lưu trữ người dùng của chúng tôi. Bạn có thể sử dụng máy chủ MongoDB trên đám mây hoặc máy chủ MongoDB cục bộ
Trong CodeLab này, chúng tôi sẽ sử dụng máy chủ Cloud MongoDB được gọi là mLab
Vì vậy, trước tiên, hãy tiếp tục và đăng ký trên mLab. Và làm theo các bước dưới đây
Sau khi đăng ký thành công, Click vào nút Tạo mới trên trang chủ
Bây giờ, chọn bất kỳ nhà cung cấp đám mây nào, ví dụ AWS. Trong Loại kế hoạch, chọn Hộp cát miễn phí, sau đó nhấp vào nút Tiếp tục ở dưới cùng bên phải
Chọn khu vực [bất kỳ] và nhấp vào tiếp tục
Nhập tên DB [bất kỳ]. Tôi đang sử dụng nút-auth. Nhấp vào tiếp tục và sau đó gửi đơn đặt hàng trên trang tiếp theo. Đừng lo lắng nó miễn phí
Bây giờ, Bạn sẽ được chuyển hướng đến trang chủ. Chọn DB của bạn tôi. xác thực nút
Sao chép URI MongoDB tiêu chuẩn
Bây giờ, bạn cần thêm người dùng vào cơ sở dữ liệu của mình. Từ 5 tab bên dưới, nhấp vào Người dùng và thêm người dùng bằng cách nhấp vào Thêm người dùng cơ sở dữ liệu
Bây giờ, bạn đã có người dùng cơ sở dữ liệu của mình. Thay thế && bằng tên người dùng và mật khẩu DB của bạn
mongodb://:@ds257698.mlab.com:57698/node-auth
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Vì vậy, Địa chỉ máy chủ Mongo [MongoURI] sẽ trông như thế này. Đừng cố kết nối trên MongoURI của tôi. Nó chỉ là một tên người dùng và mật khẩu giả. 😄😄
________số 8_______
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bây giờ, bạn có mongoURI, bạn đã sẵn sàng kết nối ứng dụng xác thực nút của mình với cơ sở dữ liệu. Vui lòng làm theo các bước dưới đây
6. Cấu hình mô hình người dùng
Hãy bắt đầu và trước tiên hãy tạo một thư mục
npm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
7. Thư mục này sẽ lưu giữ thông tin kết nối cơ sở dữ liệuTạo một tệp có tên. db. js trong cấu hình
//FILENAME : db.js
const mongoose = require["mongoose"];
// Replace this with your MONGOURI.
const MONGOURI = "mongodb://testuser:testpassword@ds257698.mlab.com:57698/node-auth";
const InitiateMongoServer = async [] => {
try {
await mongoose.connect[MONGOURI, {
useNewUrlParser: true
}];
console.log["Connected to DB !!"];
} catch [e] {
console.log[e];
throw e;
}
};
module.exports = InitiateMongoServer;
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bây giờ, chúng ta đã hoàn thành việc kết nối cơ sở dữ liệu. Hãy tạo Mô hình người dùng để lưu người dùng đã đăng ký của chúng tôi
Hãy tiếp tục và tạo một thư mục mới có tên model. Trong thư mục mô hình, tạo một tệp mới Người dùng. js
Chúng tôi sẽ sử dụng cầy mangut để tạo UserSchema
Người sử dụng. js
//FILENAME : User.js
const mongoose = require["mongoose"];
const UserSchema = mongoose.Schema[{
username: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
createdAt: {
type: Date,
default: Date.now[]
}
}];
// export model user with UserSchema
module.exports = mongoose.model["user", UserSchema];
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bây giờ, chúng ta đã hoàn thành với
npm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
8, npm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
9. Vì vậy, hãy tiếp tục và cập nhật chỉ mục của chúng tôi. js để kết nối API của chúng tôi với cơ sở dữ liệumục lục. js
const express = require["express"];
const bodyParser = require["body-parser"];
const InitiateMongoServer = require["./config/db"];
// Initiate Mongo Server
InitiateMongoServer[];
const app = express[];
// PORT
const PORT = process.env.PORT || 4000;
// Middleware
app.use[bodyParser.json[]];
app.get["/", [req, res] => {
res.json[{ message: "API Working" }];
}];
app.listen[PORT, [req, res] => {
console.log[`Server Started at PORT ${PORT}`];
}];
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Xin chúc mừng 😄😄 , Bạn đã kết nối thành công ứng dụng của mình với máy chủ MongoDB
Bây giờ, điều tiếp theo chúng ta phải làm là thực hiện một lộ trình
// File : index.js
const express = require["express"];
const bodyParser = require["body-parser"];
const app = express[];
// PORT
const PORT = process.env.PORT || 4000;
app.get["/", [req, res] => {
res.json[{ message: "API Working" }];
}];
app.listen[PORT, [req, res] => {
console.log[`Server Started at PORT ${PORT}`];
}];
0 để đăng ký người dùng mới. Chúng ta sẽ thấy điều này trong phần tiếp theo7. Đăng ký người dùng
Lộ trình đăng ký người dùng sẽ là '/user/signup'
Tạo một thư mục có tên là các tuyến đường. Trong thư mục 'tuyến đường', tạo một tệp có tên
// File : index.js
const express = require["express"];
const bodyParser = require["body-parser"];
const app = express[];
// PORT
const PORT = process.env.PORT || 4000;
app.get["/", [req, res] => {
res.json[{ message: "API Working" }];
}];
app.listen[PORT, [req, res] => {
console.log[`Server Started at PORT ${PORT}`];
}];
1tuyến đường/người dùng. js
// Filename : user.js
const express = require["express"];
const { check, validationResult} = require["express-validator/check"];
const bcrypt = require["bcryptjs"];
const jwt = require["jsonwebtoken"];
const router = express.Router[];
const User = require["../model/User"];
/**
* @method - POST
* @param - /signup
* @description - User SignUp
*/
router.post[
"/signup",
[
check["username", "Please Enter a Valid Username"]
.not[]
.isEmpty[],
check["email", "Please enter a valid email"].isEmail[],
check["password", "Please enter a valid password"].isLength[{
min: 6
}]
],
async [req, res] => {
const errors = validationResult[req];
if [!errors.isEmpty[]] {
return res.status[400].json[{
errors: errors.array[]
}];
}
const {
username,
email,
password
} = req.body;
try {
let user = await User.findOne[{
email
}];
if [user] {
return res.status[400].json[{
msg: "User Already Exists"
}];
}
user = new User[{
username,
email,
password
}];
const salt = await bcrypt.genSalt[10];
user.password = await bcrypt.hash[password, salt];
await user.save[];
const payload = {
user: {
id: user.id
}
};
jwt.sign[
payload,
"randomString", {
expiresIn: 10000
},
[err, token] => {
if [err] throw err;
res.status[200].json[{
token
}];
}
];
} catch [err] {
console.log[err.message];
res.status[500].send["Error in Saving"];
}
}
];
module.exports = router;
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bây giờ, chúng tôi đã tạo đăng ký người dùng trong 'tuyến đường/người dùng. js'. Vì vậy, chúng ta cần nhập cái này vào chỉ mục. js để làm cho nó hoạt động
Vì vậy, mã tệp chỉ mục được cập nhật sẽ trông như thế này
mục lục. js
const express = require["express"];
const bodyParser = require["body-parser"];
const user = require["./routes/user"]; //new addition
const InitiateMongoServer = require["./config/db"];
// Initiate Mongo Server
InitiateMongoServer[];
const app = express[];
// PORT
const PORT = process.env.PORT || 4000;
// Middleware
app.use[bodyParser.json[]];
app.get["/", [req, res] => {
res.json[{ message: "API Working" }];
}];
/**
* Router Middleware
* Router - /user/*
* Method - *
*/
app.use["/user", user];
app.listen[PORT, [req, res] => {
console.log[`Server Started at PORT ${PORT}`];
}];
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Hãy bắt đầu đăng ký người dùng bằng cách sử dụng người đưa thư. Người đưa thư là một công cụ để kiểm tra API
8. Đăng nhập người dùng
Bây giờ, đã đến lúc triển khai bộ định tuyến Đăng nhập sẽ được gắn trên '/user/login'
Đây là đoạn mã cho chức năng đăng nhập. Thêm đoạn mã dưới đây vào người dùng. js
npm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
0Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
9. Nhận người dùng đã đăng nhập
Bây giờ, và của bạn đang hoạt động và đổi lại bạn sẽ nhận được mã thông báo
Vì vậy, nhiệm vụ tiếp theo của chúng tôi sẽ là Truy xuất người dùng đã đăng nhập bằng cách sử dụng mã thông báo. Hãy đi và thêm chức năng này
Lộ trình
// File : index.js
const express = require["express"];
const bodyParser = require["body-parser"];
const app = express[];
// PORT
const PORT = process.env.PORT || 4000;
app.get["/", [req, res] => {
res.json[{ message: "API Working" }];
}];
app.listen[PORT, [req, res] => {
console.log[`Server Started at PORT ${PORT}`];
}];
2 sẽ trả về người dùng của bạn nếu bạn chuyển mã thông báo vào tiêu đề. Trong tuyến đường tập tin. js, hãy thêm đoạn mã dưới đâynpm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
1Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Như bạn có thể thấy, chúng tôi đã thêm phần mềm trung gian xác thực làm tham số trong tuyến đường /user/me GET, vì vậy hãy định nghĩa hàm xác thực
Hãy tiếp tục và tạo một thư mục mới có tên là phần mềm trung gian. Trong thư mục này, tạo một tệp có tên auth. js
Phần mềm trung gian xác thực này sẽ được sử dụng để xác minh mã thông báo, truy xuất người dùng dựa trên tải trọng mã thông báo
phần mềm trung gian/xác thực. js
npm install express express-validator body-parser bcryptjs jsonwebtoken mongoose --save
2Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
yay. Bạn đã tạo thành công API xác thực trong nodejs. Bây giờ, bạn có thể tiếp tục và kiểm tra điểm cuối /user/me sau khi đăng nhập
Làm thế nào để kiểm tra ứng dụng?
Cần có PostMan để kiểm tra API. Nếu bạn chưa cài đặt PostMan trước, hãy cài đặt nó
Đầu tiên, đăng ký người dùng hoặc đăng nhập nếu bạn đã đăng ký
Từ bước 1, bạn sẽ nhận được mã thông báo. Sao chép mã thông báo đó và đặt vào tiêu đề
Nhấn gửi
Đây là một bản xem trước của thử nghiệm
10. Phần kết luận
Trong CodeLab - 1 này, chúng tôi đã đề cập đến xác thực trong nodejs bằng cách sử dụng express, jsonwebtoken và MongoDB. Chúng tôi đã học về cách viết phần mềm trung gian
Đây là liên kết của mã đầy đủ cho CodeLab này. https. //github. com/dipakr/nút-auth
Ngoài ra, tôi rất muốn biết bạn muốn đề cập đến điều gì nữa trong CodeLabs tiếp theo
Tôi rất vui vì bạn đã đọc đến đây, Xin hãy cho một số ❤️ ❤️
Nếu bạn gặp sự cố khi chạy/hiểu ứng dụng này, hãy cho tôi biết trong phần nhận xét. Đừng quên đưa ra phản hồi của bạn. Nhận phản hồi giúp tôi cải thiện