Skip to content

Commit

Permalink
Merge pull request #12 from goormthon-Univ/feat/login
Browse files Browse the repository at this point in the history
[fix] 로그인 토큰 전달 완성
  • Loading branch information
uommou authored Mar 22, 2024
2 parents df7c24e + bc02c43 commit cddd2f3
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 56 deletions.
63 changes: 28 additions & 35 deletions controller/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,45 +40,38 @@ const signupApi = (req, res) => {
});
}

const loginApi = (req, res) => {
models.user.findOne({
where: {
email: req.body.email
}
})
.then((foundData) => {
const loginApi = async (req, res) => {
try {
const foundData = await models.user.findOne({
where: {
email: req.body.email
}
});

if (!foundData) {
return res.status(404).json({ error: "해당 이메일이 없습니다." });
} else {
bcrypt.compare(req.body.password, foundData.password, function(err, result) {
if (err) throw err;
if (result) {
console.log("로그인 성공!");
try {
const accessToken = jwt.sign({ // jwt생성
id: foundData.id,
email: foundData.email,
name: foundData.name,
}, "accesstoken", {
expiresIn: '1h',
issuer: "About Tech",
});

res.cookie("accessToken", accessToken, { // 클라이언트에게 쿠키 전달
secure: false, // https면 true
httpOnly: true,
});
return res.status(200).json({ message: "success login!" });
} catch (error) {
console.log(error);
return res.status(500).send(error);
}
} else {
return res.status(401).json({ error: "비밀번호가 일치하지 않습니다." });
}
}

const passwordMatch = await bcrypt.compare(req.body.password, foundData.password);

if (passwordMatch) {
const accessToken = jwt.sign({
id: foundData.id,
email: foundData.email,
}, "accesstoken", {
expiresIn: '1h',
issuer: "About Tech",
});

// 액세스 토큰을 응답 본문에 포함시킴
return res.status(200).json({ message: "success login!", accessToken });
} else {
return res.status(401).json({ error: "비밀번호가 일치하지 않습니다." });
}
})
} catch (error) {
console.error('로그인 중 에러 발생:', error);
return res.status(500).send(error);
}
}

// const myPageApi = (req, res) => {
Expand Down
38 changes: 17 additions & 21 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,32 @@ const userController = require('./controller/user.js');
const chatController = require('./controller/chatGpt.js');
const crawlController = require('./controller/crawl.js');

// 미들 웨어
function verifyToken(req, res, next) {
const token = req.cookies['accessToken']; // accessToken추출
try {
const authHeader = req.headers['accesstoken']; // 자동으로 accesstoken으로 저장됨

console.log(token);
console.log(authHeader);

// token이 존재하지 않으면
if (!token) {
return res.status(403).json('notoken');
}
// token이 존재하면
else {
const secretKey = "accesstoken";
// 헤더에서 Authorization 값이 없으면
if (!authHeader) {
return res.status(403).json({ error: '토큰이 없습니다.' });
}

// jwt를 사용하여 토큰 유효성 검증
jwt.verify(token, secretKey, (err, decoded) => {
jwt.verify(authHeader, 'accesstoken', (err, decoded) => {
if (err) {
res.clearCookie('accessToken', {path: '/', exprise: new Date(0)});
return res.status(401).json({message:'TokenFail'});
}
else {
// 복호화된 토큰의 내용 확인
console.log('이메일: ', decoded.email);
console.log('사용자 이름: ', decoded.name);
// 토큰이 유효하지 않으면
return res.status(401).json({message:'TokenFail'}); // 프론트가 이 메세지를 받았을 경우 해당 토큰을 로컬스토리지에서 지우고 로그인 페이지로 이동.
} else {
// 검증된 토큰에서 사용자 정보를 추출하여 요청 객체에 저장
req.email = decoded.email;
req.name = decoded.name;
req.email = decoded.email;
next();
next(); // 다음 미들웨어로 제어를 넘깁니다.
}
})
});
} catch (error) {
console.error('토큰 검증 중 에러 발생:', error);
return res.status(500).json({ error: '서버 에러' });
}
}

Expand Down

0 comments on commit cddd2f3

Please sign in to comment.