201020중간발표 백엔드 파트 - Marvic1130/BlinkingRecognitionProject GitHub Wiki
백엔드 진행상황
- 시퀄라이즈를 사용한 DB구축
- 회원가입 기능 구현
- JWT토큰을 이용한 로그인 구현
JWT토큰을 이용한 로그인 구현
JWT선택 이유: 세션의 경우 client의 로그인 요청이 들어올 때 마다 session Id를 가지고 session db를 거쳐 사용자의 정보를 받아야 하는 번거로움이 있지만 JWT 토큰의 경우 session db를 거칠 필요 없이 토큰의 유효성 검사 만으로 사용자 인증이 가능함
module.exports.login = async (req, res) => {
const { id, pw, name } = req.body;
try {
const pUserInfo = await Professor.findOne({ where: { id } }); //req.body로 받은 id와 Professor id 같은지 검사
const sUserInfo = await Student.findOne({ where: { id } });//req.body로 받은 id와 Student id 같은지 검사
if (sUserInfo) {
const pwCorrect = await bcrypt.compare(pw, sUserInfo.pw);
console.log(pwCorrect, pw, sUserInfo.pw);
if (!pwCorrect) {
console.log("Password is wrong!");
res.sendStatus(400);
} else {
console.log(
sUserInfo.id,
sUserInfo.name,
sUserInfo.college,
sUserInfo.sNum
);
const accessToken = jwt.sign( //accessToken 생성
{
name: sUserInfo.name,
id: sUserInfo.id,
pw: sUserInfo.pw,
sNum: sUserInfo.sNum,
college: sUserInfo.college,
department: sUserInfo.department,
},
process.env.ACCESS_SECRET,
{
expiresIn: "1m",
issuer: "jungseok",
}
);
const refreshToken = jwt.sign( //refresh Token 생성
{
id: sUserInfo.id,
pw: sUserInfo.pw,
sNum: sUserInfo.sNum,
college: sUserInfo.college,
department: sUserInfo.department,
},
process.env.REFRESH_SECRET, //비밀키
{
expiresIn: "24h", //토큰 유효시간 설정
issuer: "jungseok",//토큰 발급자
}
);
//token 전송
res.cookie("accessToken", accessToken), //브라우저에게 쿠키로 토큰 전송
{
secure: false, //https 프로토콜을 사용할 시 true
httpOnly: true,
};
res.cookie("refreshToken", refreshToken),
{
secure: false,
httpOnly: true,
};
res.status(200).json("login success");
console.log("Student Login");
}
<Postman을 사용해 login 라우터에 id와 pw 보내 로그인 실행>
<로그인 성공 accessToken, refreshToken생성>
<로그인된 User정보 확인>