【Node.js】bcryptを使って、パスワードをハッシュに変換する
Node.js

【Node.js】bcryptを使って、パスワードをハッシュに変換する

作成日:2021年11月09日
更新日:2021年11月09日

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

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

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

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

model/use.js

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

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 を呼び出します。

js
const bcrypt = require("bcrypt");

bcrypt のhashを使います。

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

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

js
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に入れます。

js
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 を返します。

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

js
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』になりました。

© 2024あずきぱんウェブスタジオ