#11,12 로그인 기능 with Bcrypt, jsonwebtoken

2022. 8. 4. 21:26TIL/따라하며 배우는 노드 리액트

728x90
[인프런] 따라하며 배우는 노드, 리액트 시리즈 - 기본강의를 들으며 정리한 내용입니다.

 

 

 

  1. 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