일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Java
- mongodb
- json
- Kubernetes
- 인생이재밌다
- mysql
- Bootstrap
- AWS Route53
- jsp
- git
- sessionStorage
- MySQL Error
- ssh
- chartjs
- html
- spring
- javascript
- zombie-hit apartment
- topologySpreadConstraints
- ES6
- ajax
- AWS RDS
- 영화예매
- terminationGracePeriodSeconds
- 예매로직
- post
- spread operator
- node.js
- Get
- AWS
- Today
- Total
jongviet
Aug 9, 2021 - nodejs 로그인 기능(bcrypt, saltRounds, cookie-parser, jsonWebToken) 본문
Aug 9, 2021 - nodejs 로그인 기능(bcrypt, saltRounds, cookie-parser, jsonWebToken)
jongviet 2021. 8. 9. 23:16*8월9일
*Bcrypt로 비밀번호 암호화 하기
-암호화 처리 후 DB 저장
npm install bcrypt --save
saltRounds //salt의 글자 수
myPlaintextPassword //암호화 전 비밀번호
//save 전 실행할 function;
userSchema.pre('save', function(next) {
var user = this; //user.js 가져옴
//비밀번호 암호화
if(user.isModified('password')) {
bcrypt.genSalt(saltRounds, function(err, salt) {
if(err) return next(err)
//password가 변경되는 상황에서만 암호화 처리
bcrypt.hash(user.password, salt, function(err, hash) {
if(err) return next(err)
user.password = hash //plain pw를 hash pw로 변경
next()
});
});
} else { //비밀번호가 아니라 다른 것을 바꾸면 next처리
next()
}
})
쿠키 의존성 처리
npm install cookie-parser --save
const cookieParser = require('cookie-parser');
app.use(cookieParser());
라우터 처리
app.post('/login', (req, res) => {
//요청 이메일을 DB에서 찾기
User.findOne({email: req.body.email}, (err, user) => {
if(!user) {
return res.json({
loginSuccess: false,
message: "제공된 이메일에 해당하는 유저가 없습니다."
})
}
//이메일과 비밀번호 일치 여부 확인
user.comparePassword(req.body.password, (err, isMatch) => {
if(!isMatch)
return res.json({ loginSuccess:false, message:"비밀번호가 틀렸습니다."})
//비번이 같다면 Token 생성
user.generateToken((err, user) => {
if(err) return res.status(400).send(err);
//토큰 저장 : cookie
res.cookie("x_auth", user.token)
.status(200)
.json({ loginSuccess:true, userId:user._id})
})
})
})
})
userSchema.methods.comparePassword = function(plainPassword, cb) {
bcrypt.compare(plainPassword, this.password, function(err, isMatch) {
if(err) return cb(err)
cb(null, isMatch)
})
}
userSchema.methods.generateToken = function(cb) {
var user = this;
//jsonwebtoken(jwt)을 이용해서 token 생성
var token = jwt.sign(user._id.toHexString(), 'secretToken')
user.token = token
user.save(function(err, user) {
if(err) return cb(err)
cb(null, user)
})
}
'node, express, nestjs' 카테고리의 다른 글
Aug 13, 2021 - node.js express 관련 강의 완강 with 인프런 (0) | 2021.08.13 |
---|---|
Aug 11, 2021 - Nodejs Auth 처리 관련 (1) | 2021.08.11 |
Aug 8, 2021 - nodemon & heroku (0) | 2021.08.08 |
Aug 7, 2021 - nodejs express setup~mongoDB~git에 연결하기 (SSH) (0) | 2021.08.07 |
Aug 6, 2021 - node.js express vs java spring 차이? (0) | 2021.08.06 |