2
1

More than 3 years have passed since last update.

【Node.js Express】Bcryptを用いて平文をハッシュ化する。

Last updated at Posted at 2020-12-22

※当方駆け出しエンジニアのため、間違っていることも多々あると思いますので、ご了承ください。また、間違いに気付いた方はご一報いただけると幸いです。

bcryptを用いたハッシュ化

bcrypt というパッケージを用いて、Node.jsでパスワードをハッシュ化し保存します。
例としてusersControllerでサインアップ時にパスワードをハッシュ化します。

bcryptをインストールします。

npm install bcrypt

ハッシュ化を実施するコントローラーでロードします。

以下のようなusresControllerがあるとします。サインアップ時に使用するコントローラーです。
ORMにsequelizeを用いています。

sequelizeについては、こちらをご覧ください。
【Express】ExpressにSequelizeを導入しORMでデーターベースを操作する。(SQLite3)

usersController.js

function signup(req, res) {
  db.sequelize.sync()
    .then(() => db.User.create({
      name: req.body.name,
      email: req.body.email,
      pass: req.body.password
    })).then(usr => {
      res.redirect('/home');
    })
}

bcryptをロードし、signup関数のpromiseチェーンに、ハッシュ化関数をかまします。

usersController.js

const bcrypt = require('bcrypt');  //bcryptをロード

function signup(req, res) {
  db.sequelize.sync()
    .then(() => bcrypt.hash(req.body.password, 10)) 
    //ハッシュ化関数をかまします。第二引数はハッシュ化の強度となります。
    .then(hashedPassword => db.User.create({ 
    //生成されたハッシュを引数hashedPasswordで受け取ります。
      name: req.body.name,
      email: req.body.email,
      pass: hashedPassword //ハッシュ化されたものを保存します。
    })).then(usr => {
      res.redirect('/home');
    })
}

ログイン時にハッシュ化したパスワードと入力したパスワードを比較する。

function login(req, res) {
  db.User.findOne({ where: { email: req.body.email } })
    //入力されたemailユーザーを取得。
    .then((user) => {
      if (!user) {
        res.redirect("login");
      }
      return user; //ユーザーを非同期で返す。
    })
    .then((user) => {
      let resultMatch = bcrypt.compareSync(req.body.password, user.pass);
      //bcrypt.compareSync関数で(入力値, ハッシュ化されて保存している値)を比較。
      //一致したらtrueを返す。
      if (resultMatch) {
        res.redirect("/home");
      }
      res.redirect("login");
    })
}
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1