반응형
jsonwebtoken 사용방법이 나와 있음
const cookieParser = require('cookie-parser')
app.use(cookieParser())//쿠키 사용
app.post('/login', (req, res) => {
//요청된 이메일을 데이터베이스에서 있는 지 찾는다.
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: "비밀번호가 틀렸습니다." })
//비밀번호 까지 맞다면 토큰을 생성한다. npm install jsonwebtoken --save
//npmjs.com/package/jsonwebtoken
user.generateToken((err, user) => {
if(err) return res.status(400).send(err)
// 토큰을 저장한다. 어디에? 쿠키, 로컬 스토리지, 세션 스토리지
// 어디가 안전한지는 논란이 있다.
// 쿠키 사용 시 npm install cookie-parser --save
res.cookie('x_auth', user.token)
.status(200) // 성공
.json({
loginSuccess: true,
userId: user._id
})
})
})
})
})
const jwt = require('jsonwebtoken')
userSchema.methods.comparePassword = function(plainPassword, callback){
//plainPassword 1234567 암호화된 비밀번호 ~~
//1234567도 암호화해서 비교해야 한다. 암호화된 비밀번호를 복호화 할 수는 없다.
bcrypt.compare(plainPassword, this.password, function(err, isMatch){
if(err) return callback(err)
callback(null, isMatch)
})
}
userSchema.methods.generateToken = function(callback){
// jsonwebtoken을 이용해서 token 생성하기
var user = this
var token = jwt.sign(user._id.toHexString(), 'secretToken') //이름은 아무렇게나 정해도 됨
user.token = token
user.save(function(err, user){
if(err) return callback(err)
callback(null, user)
})
}
포스트맨 테스트
주의 Json으로 바꾸는 거 잊으면 안됨
728x90
'공부 > nodejs' 카테고리의 다른 글
로그아웃 (0) | 2021.06.14 |
---|---|
Auth 기능 (0) | 2021.06.13 |
비밀번호 암호화 하기 Bcrypt (0) | 2021.06.13 |
비밀 설정 정보 관리 (0) | 2021.06.13 |
nodemon (0) | 2021.06.12 |
댓글