Hướng dẫn bcrypt nodejs example - ví dụ bcrypt nodejs

Hãy tưởng tượng một kịch bản mà bạn lưu trữ tất cả các mật khẩu người dùng trong văn bản đơn giản trong cơ sở dữ liệu của bạn, tức là, mật khẩu được lưu trữ trong cơ sở dữ liệu mà không cần sửa đổi. Bây giờ một số hacker có quyền truy cập vào cơ sở dữ liệu của bạn và họ có thể thấy bất kỳ thông tin đăng nhập người dùng nào được lưu trữ trong cơ sở dữ liệu và làm bất cứ điều gì họ muốn. Xin chúc mừng, tất cả dữ liệu người dùng của bạn bị xâm phạm.

Điều gì sẽ xảy ra nếu chúng ta có thể ngăn chặn điều này xảy ra? Điều gì sẽ xảy ra nếu có một cách để ngăn một hacker truy cập vào mật khẩu người dùng của bạn ngay cả khi cơ sở dữ liệu của bạn bị xâm phạm? Có, có một cái gọi là mật khẩu băm.Password Hashing.

Mật khẩu băm là gì?

Băm là một vé một chiều để mã hóa dữ liệu. Băm thực hiện chuyển đổi một chiều trên mật khẩu, biến mật khẩu thành một chuỗi khác, được gọi là mật khẩu băm. Băm được gọi là một cách bởi vì thực tế không thể lấy văn bản gốc từ một hàm băm.

Điều kiện tiên quyết

Trước khi tiếp tục, tôi cho rằng bạn có một số ý tưởng về những điều sau đây:

  • Làm việc với hệ sinh thái nút
  • Một ý tưởng ngắn gọn về MongoDB
  • và một số kiến ​​thức JavaScript

Đảm bảo bạn đã cài đặt các mục sau trên hệ thống của mình để tiến lên với blog

  • Nodejs và npm
  • MongoDB

Hãy thực hiện mật khẩu băm trong ứng dụng nút của chúng tôi!

Bước 1: Tạo một thư mục mới và khởi tạo một dự án mới trong đó bằng cách sử dụng.: Create a new directory and initialize a new project in it using.

  npm init -y

Bước 2: Cài đặt một số phụ thuộc dự án.: Installing some of the project dependencies.

Chúng tôi sẽ sử dụng expressjs để tạo một máy chủ mới và mongoose để tương tác với MongoDB trong ứng dụng nút của chúng tôi.

  npm install --save mongoose express

Bước 3: Hãy viết máy chủ của chúng tôi bằng Express và kết nối nó với MongoDB bằng Mongoose.: Let's write our server using express and connect it to MongoDB using mongoose.

  • Tạo một tệp mới có tên Server.js tại gốc của dự án.

________số 8

  const express = require('express');
  const app = express();
  const mongoose = require('mongoose');
  // to parse json data from request object
  app.use(express.json())


  mongoose.connect("mongodb://localhost:27010/demo", {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      useCreateIndex: true,
    })
    .then(() => console.log("Connected to DB"))
    .catch (console.error);

  app.listen(3000, () => console.log("Running on port 3000"))

Chạy máy chủ của bạn bằng node server.js. Đây là một máy chủ đơn giản đang chạy trên cổng 3000. Ở đây chúng tôi đang sử dụng dữ liệu phần mềm trung gian của Express 'để phân tích dữ liệu.

Lưu ý: Để xem các thay đổi được cập nhật sau mỗi bước, bạn cần chạy máy chủ của mình nhiều lần hoặc sử dụng gói như Nodemon, sẽ xem bất kỳ thay đổi tệp nào.

Bước 4 Bây giờ, chúng tôi sẽ tạo lược đồ người dùng của mình Now, we will create our user schema

  • Tạo một tệp được gọi là
      npm install --save mongoose express
    0 trong gốc của dự án và thêm mã sau vào nó.

  npm install --save mongoose express
0

  const mongoose = require('mongoose');

  const UserSchema = new mongoose.Schema({
    email: String,
    password: String,
  })

  module.exports = mongoose.model('user', UserSchema)

Ở đây chúng tôi đã tạo một mô hình người dùng đơn giản với email và mật khẩu và xuất nó. Tôi không sử dụng bất kỳ xác nhận nào ở đây, vì đây không phải là một hướng dẫn về Mongoose. Bạn phải sử dụng xác nhận dữ liệu trong một ứng dụng thực.

Bước 5 Tạo các tuyến đường của chúng tôi để đăng nhập và đăng ký Create our routes for login and signup

  • Cài đặt mô -đun BCRYPT trong dự án của chúng tôi:
      npm install --save mongoose express
    2.
  • Tạo một tệp riêng được gọi là
      npm install --save mongoose express
    3 trong gốc của dự án và thêm mã sau vào nó

  npm install --save mongoose express
3

  const bcrypt = require("bcrypt");
  const express = require("express");
  const User = require("./userModel");
  const router = express.Router();
  // signup route
  router.post("/signup", async (req, res) => {
    const body = req.body;

    if (!(body.email && body.password)) {
      return res.status(400).send({ error: "Data not formatted properly" });
    }

    // creating a new mongoose doc from user data
    const user = new User(body);
    // generate salt to hash password
    const salt = await bcrypt.genSalt(10);
    // now we set user password to hashed password
    user.password = await bcrypt.hash(user.password, salt);
    user.save().then((doc) => res.status(201).send(doc));
  });

  // login route
  router.post("/login", async (req, res) => {
    const body = req.body;
    const user = await User.findOne({ email: body.email });
    if (user) {
      // check user password with hashed password stored in the database
      const validPassword = await bcrypt.compare(body.password, user.password);
      if (validPassword) {
        res.status(200).json({ message: "Valid password" });
      } else {
        res.status(400).json({ error: "Invalid Password" });
      }
    } else {
      res.status(401).json({ error: "User does not exist" });
    }
  });

  module.exports = router;

Ở đây chúng tôi đã sử dụng bộ định tuyến Express để tạo các tuyến đường của chúng tôi trong một tệp riêng biệt để giữ cho server.js của chúng tôi sạch nhất có thể.

Chúng tôi đang sử dụng mật khẩu người dùng

  npm install --save mongoose express
6 để băm và sau đó lưu trữ chúng trong cơ sở dữ liệu. Bằng cách này, chúng tôi không lưu trữ mật khẩu văn bản thuần túy trong cơ sở dữ liệu và ngay cả khi ai đó có thể truy cập vào mật khẩu băm, họ sẽ không thể đăng nhập.

  • Nhập các tuyến người dùng trong máy chủ.js. Xem mã cập nhật bên dưới.

________số 8

  const express = require("express");
  const mongoose = require("mongoose");
  const userRoutes = require("./userRoutes");

  const app = express();

  mongoose
    .connect("mongodb://localhost:27017/demo", { useNewUrlParser: true })
    .then((_) => console.log("Connected to DB"))
    .catch((err) => console.error("error", err));

  app.use(express.json());
  // here we want express to use userRoutes for all requests coming at /auth like /auth/login
  app.use("/auth", userRoutes);

  app.listen(3000, () => console.log("Running on port 3000"));

Chạy máy chủ của bạn bằng node server.js. Đây là một máy chủ đơn giản đang chạy trên cổng 3000. Ở đây chúng tôi đang sử dụng dữ liệu phần mềm trung gian của Express 'để phân tích dữ liệu.

Lưu ý: Để xem các thay đổi được cập nhật sau mỗi bước, bạn cần chạy máy chủ của mình nhiều lần hoặc sử dụng gói như Nodemon, sẽ xem bất kỳ thay đổi tệp nào.

Bước 4 Bây giờ, chúng tôi sẽ tạo lược đồ người dùng của mình: Let's test our server now.

Tạo một tệp được gọi là

  npm install --save mongoose express
0 trong gốc của dự án và thêm mã sau vào nó.

  •   npm install --save mongoose express
    0

    • Ở đây chúng tôi đã tạo một mô hình người dùng đơn giản với email và mật khẩu và xuất nó. Tôi không sử dụng bất kỳ xác nhận nào ở đây, vì đây không phải là một hướng dẫn về Mongoose. Bạn phải sử dụng xác nhận dữ liệu trong một ứng dụng thực.
  • Bước 5 Tạo các tuyến đường của chúng tôi để đăng nhập và đăng ký

    • Cài đặt mô -đun BCRYPT trong dự án của chúng tôi:
        npm install --save mongoose express
      2.

Tạo một tệp riêng được gọi là npm install --save mongoose express3 trong gốc của dự án và thêm mã sau vào nó

  npm install --save mongoose express
3