[BCRYPT暗号化パスワードを使用[NODE.JS]
9842 ワード
以前に会員登録apiを作成した場合、パスワードはqwe 123!@#入力、戻り値とMongoDBのqwe 123!@#「」のパスワードの値が写っています.つまり、あるサイトに会員登録しておけば、DBでパスワードを確認できます.危ない!そこで今日は、Bcryptという暗号化ハッシュ関数で暗号化して保存します.
bcryptのインストールと適用
bcryptのインストールと適用
まず、bcryptをインストールします.package.jsonの依存項がきれいに加わっているのが見えます.npm install bcrypt
今回は、インストールしたbcryptを使用して暗号化パスワードの関数を作成します.const mongoose = require('mongoose');
const bcrypt = require('bcrypt'); // bcrypt 임포트
const saltRounds = 10; // salt값을 10으로 정해주었다.
const userSchema = mongoose.Schema({
name: {
type: String,
maxLength: 50,
},
email: {
type: String,
maxLength: 50,
trim: true, // space를 없애준다.
// unique: 1, // 같은값은 하나만 존재할 수 있다.
},
password: {
type: String,
maxLength: 50,
},
role: {
type: Number,
default: 0, // 값이 정해지지 않았다면 디폴트로 0!
},
token: {
type: String,
},
tokenExp: {
type: Number,
},
});
userSchema.pre('save', function (next) { // userSchema가 save 되기 전에(pre) 실행할 함수function은~
const user = this; // this는 userSchema를 가르킨다.
if (user.isModified('password')) { // password가 수정될때만 아래 코드 실행!
bcrypt.genSalt(saltRounds, function (err, salt) { // saltRounds가 10인 salt를 generate 해주자.
if (err) return next(err); // 에러처리
bcrypt.hash(user.password, salt, function (err, hash) { // user.password를 salt로 변경해서 hash로 return하는 함수~
if (err) return next(err); // 에러처리
user.password = hash; // user.password 자리에 hash를 할당!
next(); // pre에서 나가 다음 코드 실행!
});
});
else {
next(); // password 변경이 아닌 경우 바로 save코드 실행
}
}
});
const User = mongoose.model('User', userSchema); // userSchema를 model로 만들어준다.
module.exports = { User };
上記のように、暗号化されたパスワードのコードを作成し、Postmanにパスワードを入力してregister apiを呼び出します.
return値のpasswordを調べたところ、暗号化された値が正しいことがわかりました👍🏻
リファレンス
最初はsaltが10桁だと思っていましたが、返却価格を見てみるとそうではないことに気づきました.そこで、ウィキツリーで暗号化されたパスワードの構造を検索します.まだcostが何なのか、なぜsaltとhashに分かれているのかはわかりませんが、こう見ると結構目に入ります.
John AhnのYouTubeレッスンを通じて勉強し、文章を書いた.😊
Reference
この問題について([BCRYPT暗号化パスワードを使用[NODE.JS]), 我々は、より多くの情報をここで見つけました
https://velog.io/@dev_cecy/NODE.JS-BCRYPT로-비밀번호-암호화하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
const mongoose = require('mongoose');
const bcrypt = require('bcrypt'); // bcrypt 임포트
const saltRounds = 10; // salt값을 10으로 정해주었다.
const userSchema = mongoose.Schema({
name: {
type: String,
maxLength: 50,
},
email: {
type: String,
maxLength: 50,
trim: true, // space를 없애준다.
// unique: 1, // 같은값은 하나만 존재할 수 있다.
},
password: {
type: String,
maxLength: 50,
},
role: {
type: Number,
default: 0, // 값이 정해지지 않았다면 디폴트로 0!
},
token: {
type: String,
},
tokenExp: {
type: Number,
},
});
userSchema.pre('save', function (next) { // userSchema가 save 되기 전에(pre) 실행할 함수function은~
const user = this; // this는 userSchema를 가르킨다.
if (user.isModified('password')) { // password가 수정될때만 아래 코드 실행!
bcrypt.genSalt(saltRounds, function (err, salt) { // saltRounds가 10인 salt를 generate 해주자.
if (err) return next(err); // 에러처리
bcrypt.hash(user.password, salt, function (err, hash) { // user.password를 salt로 변경해서 hash로 return하는 함수~
if (err) return next(err); // 에러처리
user.password = hash; // user.password 자리에 hash를 할당!
next(); // pre에서 나가 다음 코드 실행!
});
});
else {
next(); // password 변경이 아닌 경우 바로 save코드 실행
}
}
});
const User = mongoose.model('User', userSchema); // userSchema를 model로 만들어준다.
module.exports = { User };
最初はsaltが10桁だと思っていましたが、返却価格を見てみるとそうではないことに気づきました.そこで、ウィキツリーで暗号化されたパスワードの構造を検索します.まだcostが何なのか、なぜsaltとhashに分かれているのかはわかりませんが、こう見ると結構目に入ります.
John AhnのYouTubeレッスンを通じて勉強し、文章を書いた.😊
Reference
この問題について([BCRYPT暗号化パスワードを使用[NODE.JS]), 我々は、より多くの情報をここで見つけました https://velog.io/@dev_cecy/NODE.JS-BCRYPT로-비밀번호-암호화하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol