パスワードのセキュリティを上げるために、ハッシュに変換します。

ハッシュとは、データを不可逆変換して置き換えることです。

不可逆変換なので解読が非常に困難になります。

コードは、以下のコードを使います。

model/use.js

const mongoose = require("mongoose")
const Schema = mongoose.Schema

const bookShema = new Schema({
  email: String,
  password: String,
})

module.exports = mongoose.model("User", bookShema)

controllers/auth.js

const User = require("../model/user")

const { validationResult } = require("express-validator")

exports.signUp = (req, res, next) => {
  const errors = validationResult(req)
  if (!errors.isEmpty()) {
    return res
      .status(400)
      .json({ message: "validation errors", errors: errors.array() })
  }
  const email = req.body.email
  const password = req.body.password
  res.status(201).json({
    message: "Data transmission completed!",
    auth: { email: email, password: password },
  })
}

まずは、ターミナルでnpm install --save bcryptを実行します。

bcrypt を呼び出します。

const bcrypt = require("bcrypt")

bcrypt のhashを使います。

hash の第一引数に、ハッシュ化したい文字列、今回はパスワードを入れます。

第二引数に、何回ハッシュ化するかを入力します。今回は、10 回行います。

exports.signUp = (req, res, next) => {
  const errors = validationResult(req)
  if (!errors.isEmpty()) {
    return res
      .status(400)
      .json({ message: "validation errors", errors: errors.array() })
  }
  const email = req.body.email
  const password = req.body.password
  bcrypt.hash(password, 10)

  res.status(201).json({
    message: "Data transmission completed!",
    auth: { email: email, password: password },
  })
}

thenで、ハッシュ化されたパスワードをUserに入れます。

exports.signUp = (req, res, next) => {
  const errors = validationResult(req)
  if (!errors.isEmpty()) {
    return res
      .status(400)
      .json({ message: "validation errors", errors: errors.array() })
  }
  const email = req.body.email
  const password = req.body.password
  bcrypt.hash(password, 10).then(hashedPassword => {
    const user = new User({
      email: email,
      password: hashedPassword,
    })
    return user.save()
  })

  res.status(201).json({
    message: "Data transmission completed!",
    auth: { email: email, password: password },
  })
}

成功した場合は、status 201 を返します。

失敗した場合は、エラーを表示します。

exports.signUp = (req, res, next) => {
  const errors = validationResult(req)
  if (!errors.isEmpty()) {
    return res
      .status(400)
      .json({ message: "validation errors", errors: errors.array() })
  }
  const email = req.body.email
  const password = req.body.password
  bcrypt
    .hash(password, 10)
    .then(hashedPassword => {
      const user = new User({
        email: email,
        password: hashedPassword,
      })
      return user.save()
    })
    .then(() => {
      res.status(201).json({
        message: "User transmission completed!",
      })
    })
    .catch(err => console.log(err))
}

サーバーを起動して、Postman で確認します。

email は、『test@test.com』、password は、『aaaaaaaa』にします。

image2

送信してみると、

image3

無事、送信できました。

MongoDB のデータを確認してみます。

image4

パスワードは『aaaaaaaa』でしたが、ハッシュ化されて、『$2b$10$8XdGVJByTUaMo/dARTHcBuhTbqRhN/Vv9VNQh9uCLf.ubrfFy2P/G』になりました。

ブログ一覧