Cách đăng nhập với mật khẩu thô khi mật khẩu trong cơ sở dữ liệu được lưu dưới dạng hash trong Node.js

Hướng dẫn cách xác thực người dùng đăng nhập bằng cách so sánh mật khẩu thô với mật khẩu đã được hash trong cơ sở dữ liệu. Sử dụng `bcrypt` trong Node.js để kiểm tra sự khớp giữa mật khẩu thô và mật khẩu đã hash.

Bài viết này sẽ hướng dẫn cách xác thực người dùng trong Node.js khi mật khẩu của họ được lưu trữ dưới dạng hash trong cơ sở dữ liệu. Chúng ta sẽ sử dụng bcrypt để so sánh mật khẩu người dùng nhập với mật khẩu đã được mã hóa.

Mã JavaScript:

// Import các thư viện cần thiết
const bcrypt = require('bcrypt');
const express = require('express');
const bodyParser = require('body-parser');

// Khởi tạo ứng dụng express
const app = express();
app.use(bodyParser.json());

// Giả sử đây là mật khẩu hash lưu trong cơ sở dữ liệu
const storedHashedPassword = '$2b$10$eW5OoANrF5OYsXBXFBDyYeZG96V8uAblEUHhPzBwdKa5wqlXpoGva'; // Hash của mật khẩu 'mypassword'

// Hàm đăng nhập
app.post('/login', async (req, res) => {
    const { password } = req.body; // Nhận mật khẩu thô từ yêu cầu POST

    try {
        // So sánh mật khẩu thô với mật khẩu hash
        const match = await bcrypt.compare(password, storedHashedPassword);

        if (match) {
            // Nếu mật khẩu khớp
            res.send('Đăng nhập thành công!');
        } else {
            // Nếu mật khẩu không khớp
            res.status(400).send('Mật khẩu không chính xác.');
        }
    } catch (error) {
        res.status(500).send('Đã xảy ra lỗi.');
    }
});

// Lắng nghe cổng 3000
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

Giải thích chi tiết từng dòng code:

  1. const bcrypt = require('bcrypt');: Import thư viện bcrypt để hash và so sánh mật khẩu.
  2. const express = require('express');: Import thư viện express để tạo server HTTP.
  3. app.use(bodyParser.json());: Sử dụng body-parser để xử lý dữ liệu từ POST request dưới dạng JSON.
  4. const storedHashedPassword = '...': Giả sử đây là mật khẩu hash lưu trong cơ sở dữ liệu.
  5. app.post('/login', ...): Định nghĩa endpoint /login để xử lý đăng nhập.
  6. const match = await bcrypt.compare(password, storedHashedPassword);: So sánh mật khẩu thô với mật khẩu hash.
  7. if (match): Nếu mật khẩu khớp, trả về thông báo thành công.
  8. else: Nếu không khớp, trả về lỗi đăng nhập.
  9. app.listen(3000, ...): Chạy ứng dụng trên cổng 3000.

Yêu cầu hệ thống:

  • Node.js phiên bản 12 trở lên.
  • Thư viện bcrypt: Dùng để hash và so sánh mật khẩu.
  • Thư viện express: Dùng để tạo server HTTP.
  • Thư viện body-parser: Dùng để xử lý dữ liệu từ POST request.

Cách cài đặt các thư viện:

npm install bcrypt express body-parser

Lời khuyên:

  • Nên sử dụng bcrypt với số rounds lớn (tối thiểu 10) để tăng cường bảo mật cho quá trình mã hóa mật khẩu.
  • Không bao giờ lưu trữ mật khẩu thô của người dùng trong cơ sở dữ liệu.
Tags: Node.js


Các Hướng Dẫn Cùng Chủ Đề Đang Xem

Cách ghi nội dung vào file Excel bằng Node.js

Hướng dẫn cách ghi dữ liệu vào file Excel bằng Node.js, sử dụng thư viện ExcelJS để tạo và thao tác file Excel một cách hiệu quả.
Các chức năng thường dùng khi sử dụng Selenium Chrome trong Node.js

Bài viết này sẽ liệt kê các chức năng thường dùng khi sử dụng Selenium với Chrome trong Node.js. Đây là các phương thức quan trọng giúp bạn tự động hóa quy trình kiểm thử và thao tác trên trình duyệt.
Sử dụng Selenium trong Node.js để gửi đoạn mã JavaScript vào website trên Chrome

Hướng dẫn cách sử dụng Selenium trong Node.js để tự động hóa việc gửi đoạn mã JavaScript vào một trang web trên trình duyệt Chrome. Bài viết sẽ hướng dẫn từng bước từ cài đặt đến thực thi mã.
Cách tự động đăng nhập vào website sử dụng Selenium với Chrome trong Node.js

Hướng dẫn cách sử dụng Selenium trong Node.js để tự động đăng nhập vào một website. Bài viết sẽ chỉ ra cách thiết lập môi trường và viết mã Node.js để điều khiển trình duyệt Chrome.
Cách mở ứng dụng Notepad bằng Node.js

Hướng dẫn cách mở ứng dụng Notepad trên hệ điều hành Windows bằng Node.js sử dụng mô-đun `child_process`. Đây là phương pháp đơn giản để gọi các ứng dụng hệ thống từ Node.js.
Hướng dẫn tạo form upload nhiều hình ảnh bằng Node.js

Hướng dẫn chi tiết cách tạo form upload nhiều hình ảnh trong Node.js bằng cách sử dụng thư viện `Multer` để xử lý tệp tải lên và `Express` để tạo server.
Hướng dẫn đọc file Excel bằng Node.js

Hướng dẫn chi tiết cách đọc nội dung từ file Excel (.xlsx, .xls) bằng Node.js, sử dụng thư viện xlsx với các bước cài đặt và ví dụ minh họa cụ thể.
Cách SELECT dữ liệu từ database MySQL bằng Node.js

Hướng dẫn cách sử dụng Prepared Statements trong Node.js để truy vấn dữ liệu từ database MySQL với nhiều tham số một cách an toàn và hiệu quả.
Cách gửi dữ liệu tới API bằng Node.js

Bài viết này hướng dẫn cách gửi dữ liệu JSON tới một API bằng cách sử dụng thư viện axios trong Node.js, giúp bạn dễ dàng thực hiện các yêu cầu POST đến dịch vụ web.
Xác thực JSON Web Token (JWT) trong Node.js

Bài viết này sẽ hướng dẫn cách sử dụng JSON Web Token (JWT) để xác thực người dùng trong ứng dụng Node.js. JWT là một cách phổ biến và an toàn để bảo mật API thông qua việc truyền thông tin xác thực giữa máy chủ và người dùng.

Đã thêm vào giỏ hàng