-
[node.js] bcrypt로 비밀번호 암호화하기node.JS 2021. 12. 31. 23:51
1. Bcrypt 를 이용하여 비밀번호를 암호화해줘서 DB에 저장하기
1. bcrypt 다운
npm install bcrypt --save
2.index.js
const express = require('express'); const app = express() const port = 8080 //User model 가져오기 const { User } = require("./models/User") //body-parser 가져오기 const bodyParser = require('body-parser') //body-parser 옵션주기 (Server에서 정보를 분석하여 가져올 수 있도록) app.use(bodyParser.urlencoded({extended: true})); //application/x-www-form-urlencoded app.use(bodyParser.json()); //application/json //key.js 가져오기 const config = require('./config/key'); //mongoose를 이용하여 어플리케이션과 mongo db 연결 const mongoose = require('mongoose') mongoose.connect(config.mongoURI,{ usenewurlparser: true, useUnifiedTopology: true }).then(()=>console.log('MongoDb Connected..')) .catch(err=>console.log(err)) app.get('/',(req,res)=> res.send('Hello Hyojeong! nodemon 변경')) //회원가입을 위한 route만들기 app.post('/api/users/register',(req,res) => { //Client에서 보내주는 정보들을 DB에 넣어주기 const user = new User(req.body) //instance만들기 //req.body 안에는 bodyParser 덕분에 json 형식으로 data가 있다. user.save((err,userInfo)=>{ if(err) return res.json({ success: false, err}) //성공하지 못했을 때 성공하지 못했다고 json 형식으로 전달되고 err message도 함께 전달한다. return res.status(200).json({ success: true }) //status(200) : 성공했다는 뜻 }) }) app.listen(port, () => console.log(`Example app listening on port ${port}!`))
3. User.js
const mongoose = require('mongoose'); //mongoose module 가져오기 const bcrypt = require('bcrypt') const saltRounds = 10 //10자리 salt const jwt = require('jsonwebtoken'); const userSchema = mongoose.Schema({ //mongoose를 이용하여 schema 생성 name:{ type: String, maxlength: 50 }, email:{ type: String, trim: true, //빈칸 제거 unique: 1 }, password: { type: String, minlength: 5 }, role: { type: Number, default: 0 }, image: String, token:{ type: String }, tokenExp: { type: Number } }) userSchema.pre('save',function(next){ //save: User 모델에 user 정보를 저장하기 전에 function을 실행한다. var user = this; if(user.isModified('password')){ //비밀번호가 변환될 때만 암호화하기 //비밀번호를 암호화 시킨다. bcrypt.genSalt(saltRounds,function(err,salt){ //1.salt를 생성. (saltRounds가 필요함) if(err) return next(err) //err가 나면 index.js 에 user.save if(err)로 보낸다. bcrypt.hash(user.password,salt,function(err,hash){ //salt가 제대로 생성되었을 때. hash:암호화된 비밀번호 if(err) return next(err) //err user.password=hash //hash를 만드는데 성공했다면 password를 hash로 교체하기 next() }) }) }else{ next() } }) const User = mongoose.model('User', userSchema) //model(model이름,schema) module.exports = { User } //model 을 다른 파일에서도 쓰기 위해 export하기
postman 에서 회원가입 진행하기 DB에서 password가 암호화되어 있는 것을 확인할 수 있다. 참고 : https://www.youtube.com/watch?v=XonyJxSDoGE&t=27s
728x90'node.JS' 카테고리의 다른 글
[Node.js] AUTH 만들기 (0) 2022.01.01 [Node.js] 로그인 / 토큰 생성 with JSON WEB TOKEN (0) 2021.12.31 [Node.js] Nodemon 설치 (0) 2021.12.28 [Node.js] 회원가입 기능 만들기 (0) 2021.12.28 [Node.js] Mongoose schema 만들기 (0) 2021.12.28