#11,12 로그인 기능 with Bcrypt, jsonwebtoken
2022. 8. 4. 21:26ㆍTIL/따라하며 배우는 노드 리액트
728x90
[인프런] 따라하며 배우는 노드, 리액트 시리즈 - 기본강의를 들으며 정리한 내용입니다.
- login Route 만들기(index.js)
- jsonwebtoken, cookie-parser 설치 필요(npm install jsonwebtoken cookie-parser --save)
//index.js
const cookieParser = require('cookie-parser');
app.use(cookieParser());
app.post('/login', (req, res) => {
User.findOne({email : req.body.email}, (err, user) => {
// 1. 요청된 이메일을 데이터베이스에서 있는지 찾는다.
if(!user){
return res.json({
loginSuccess: false,
message: '제공된 이메일에 해당하는 유저가 없습니다.'
})
}
// 2. 요청된 이메일이 데이터 베이스에 있다면 맞는 비밀번호인지 확인한다.
User.comparePassword(req.body.password, (err, isMatch) => {
//User.js 파일에 추가해준 메소드
if(!isMatch) return res.json({
loginSuccess: false,
massage: "비밀번호가 틀렸습니다."
})
})
// 3. 비밀번호까지 맞다면 토큰을 생성한다.
User.generateToken((err,user) => {
if(err) return res.status(400).send(err);
res.cookie("x_auth", user.token)
.status(200)
.json({ loginSuccess: true, userId: user._id })
})
})
})
//User.js
const jwt = require('jsonwebtoken');
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) {
const user = this;
const token = jwt.sign(user._id.toHexString(), 'secretToken');
user.token = token;
user.save(function(err, user){
if(err) return cb(err);
cb(null, user) ;
})
}
'TIL > 따라하며 배우는 노드 리액트' 카테고리의 다른 글
#14 로그아웃 기능 (0) | 2022.08.04 |
---|---|
#13 Auth 기능 만들기 (0) | 2022.08.04 |
#10 Bcrypt로 비밀번호 암호화 하기 (0) | 2022.08.03 |
#9 비밀 설정 정보 관리 (0) | 2022.08.03 |
#8 Nodemon 설치 (0) | 2022.08.03 |