10. Node 가계부 만들기 [ 로그인 passport 전략 생성 ] - 2
2022. 5. 28. 19:28ㆍ프로젝트/가계부 - 제작 JavaScript
passport를 이용 하여 로그인 기능, jwt 검증을 만든다.
passport.js파일에 passport-local, passport-jwt 전략 생성
1. passport-local 전략 생성
usernameField : 받는 아이디 파라미터 이름
passwordField : 받는 비밀번호 파라미터 이름
을 넣어준다.
1-1. 받은 유저 아이디 값으로 해당 유저가 존재하는지 DB 검색을 한다.
1-2. 유저가 존재하면 salt값과 password값을 DB검색을 하고 Password() 함수에 유저가 보낸 비빌번호값, salt값을 넣어준다.
1-3. Password()함수를 이용해 password (hash값)을 만들고 DB에 있는 password값과 비교 한 후 같다면 return done 값에 DB에서 나온 유저 데이터를 넣어준다.
1-1 ~ 1-3 까지 코드가 진행되는 중간에 아이디나 비밀번호가 틀렸다면 return done에 false를 넣는다
const passport = require('passport')
const localPassport = require('passport-local')
const Users = require('../../models/user')
const { Password } = require('../../lib/lib')
const LocalStrategy = localPassport.Strategy
const LocalPassport = passport.use(
new LocalStrategy(
{
usernameField: 'id',
passwordField: 'pwd'
},
async (id, pwd, done) => {
const user = await Users.findOne({ where: { id } })
if (user === null) {
return done(null, false)
} else {
const userPassword = user.password
const salt = user.salt
const pwdCheck = Password({ pwd, salt })
if (userPassword === pwdCheck) {
return done(null, user)
} else {
return done(null, false)
}
}
}
)
)
2. passport-jwt 전략 생성
jwtFromRequest : 토큰이 들어 가 있는 헤더 값
secretOrKey : JWT 키 값
1-1. 토큰에 넣은 유저 값을 payload를 이용해 해당 유저가 존재하는지 DB에 검색을 한다.
1-2. 유저가 존재하면 유저의 정보를 return done에 넣어준다.
* process.env.JWT 값은 환경변수로 설정 한 값이다.
const passport = require('passport')
const jwtPassport = require('passport-jwt')
const Users = require('../../models/user')
const JwtStrategy = jwtPassport.Strategy
const ExtractJwt = jwtPassport.ExtractJwt
const JWT = process.env.JWT
const JwtPassport = passport.use(
new JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader('authorization'),
secretOrKey: JWT
},
async (payload, done) => {
try {
const index = payload.check
const user = await Users.findOne({ where: { index } })
if (user) {
return done(null, user.index)
} else {
return done(null, false)
}
} catch (E) {
return done(E)
}
}
)
)
3. passport.js 최종
const passport = require('passport')
const localPassport = require('passport-local')
const jwtPassport = require('passport-jwt')
const Users = require('../../models/user')
const { Password } = require('../../lib/lib')
const LocalStrategy = localPassport.Strategy
const JwtStrategy = jwtPassport.Strategy
const ExtractJwt = jwtPassport.ExtractJwt
const JWT = process.env.JWT
const LocalPassport = passport.use(
new LocalStrategy(
{
usernameField: 'id',
passwordField: 'pwd'
},
async (id, pwd, done) => {
const user = await Users.findOne({ where: { id } })
if (user === null) {
return done(null, false)
} else {
const userPassword = user.password
const salt = user.salt
const pwdCheck = Password({ pwd, salt })
if (userPassword === pwdCheck) {
return done(null, user)
} else {
return done(null, false)
}
}
}
)
)
const JwtPassport = passport.use(
new JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader('authorization'),
secretOrKey: JWT
},
async (payload, done) => {
try {
const index = payload.check
const user = await Users.findOne({ where: { index } })
if (user) {
return done(null, user.index)
} else {
return done(null, false)
}
} catch (E) {
return done(E)
}
}
)
)
module.exports = { LocalPassport, JwtPassport }
728x90
반응형
'프로젝트 > 가계부 - 제작 JavaScript' 카테고리의 다른 글
12. Node 가계부 만들기 [ 로그인 Service 코드 작성 ] - 4 (0) | 2022.05.28 |
---|---|
11. Node 가계부 만들기 [ 로그인 route 코드 작성 ] - 3 (0) | 2022.05.28 |
9. Node 가계부 만들기 [ 로그인 기능 구현 파일 생성 ] - 1 (0) | 2022.05.28 |
8. Node 가계부 만들기 [ 유저 기능 (회원 가입) 전송 받은 데이터 유효성 검사 ] - 5 (0) | 2022.05.28 |
7. Node 가계부 만들기 [ 유저 기능 (회원 가입) Service코드 작성 ] - 4 (0) | 2022.05.28 |