회원가입, 로그인, 로그아웃 라우터로 기본적인 코드 형태를 띄고 있다.
// 회원가입
router.post('/auth/signup', authMiddleware, async (req, res) => {
const { email, password, nickname } = req.body;
// 이메일 중복 확인
const isExistUser = await prisma.users.findFirst({
where: {
email,
},
});
if (isExistUser) {
return res.status(409).json({ message: '이미 존재하는 이메일입니다.' });
}
try {
// 사용자 생성
const user = await prisma.users.create({
data: {
email: email,
password: password,
nickname: nickname,
},
});
return res.status(201).json({ message: '회원가입이 완료되었습니다.' });
} catch (error) {
console.error(error);
return res.status(500).json({ message: '서버 에러가 발생했습니다.' });
}
});
// 로그인
router.post('/auth/signin', authMiddleware, async (req, res) => {
const { email, password } = req.body;
// 이메일로 사용자 검색
const user = await prisma.users.findFirst({
where: {
email,
},
});
// 사용자가 존재하지 않거나 비밀번호가 일치하지 않으면 오류 반환
if (!user || user.password !== password) {
return res.status(401).json({ message: '이메일 또는 비밀번호가 일치하지 않습니다.' });
}
// 로그인 성공 시 응답 (토큰 생성 등의 추가 작업 가능)
return res.status(200).json({ message: '로그인이 성공적으로 완료되었습니다.', user });
});
// 로그아웃
router.post('/api/auth/logout', authMiddleware, async (req, res) => {
try {
// 로그아웃 로직 (예: 세션 무효화, 토큰 삭제 등)
const user = req.user; // authMiddleware를 통해 가져온 사용자 정보
if (!user) {
return res.status(401).json({ message: '로그인이 필요합니다.' });
}
// 클라이언트 측에서 사용할 토큰 무효화 예시
res.clearCookie('token'); // 쿠키에 저장된 JWT 토큰 삭제
// 추가 작업이 필요한 경우 여기에 작성 (예: 서버 측 세션 관리 시 세션 삭제)
return res.status(200).json({ message: '성공적으로 로그아웃되었습니다.' });
} catch (error) {
console.error(error);
return res.status(500).json({ message: '서버 에러가 발생했습니다.' });
}
});
여기에 미들웨어로 엑세스 토큰과 리프레쉬 토큰을 추가해 사용할 수 있고 네이버, 구글 이메일 인증까지 진행할 수 있다. 추후에 이 코드를 바탕으로 도전을 해봐야겠다.
HTTP 메서드
GET : 자원을 습득하기 위한 메서드
HEAD : GET과 동일하나 헤더만을 응답받는 메서드
POST : 서버로 하여금 특정 작업을 처리하게끔 하는 메서드
PUT : 자원을 대체하기 위한 메서드
PATCH : 자원에 대한 부분적 수정을 위한 메서드
DELETE : 자원을 삭제하기 위한 메서드
CONNECT : 자원에 대한 양방향 연결을 시작하는 메서드
OPTIONS : 사용 가능한 메서드 등 통신 옵션을 확인하는 메서드
TRACE : 자원에 대한 루프백 테스트를 수행하는 메서드
오전에는 베이직반에서 API Restful 과 Acces Token / Refresh Token 에 대해 배웠고 Insomnia 에서 사용하는 방법에 대해서도 알았다. 그리고 오후에는 뉴스 피드 프로젝트를 진행했으며 아직 프론트엔드 부분이 마무리되지 않았지만 끝마무리까지 도착했다.
아직도 기본적인 코드 지식에 대해 많이 부족하지만 이렇게라도 밑에서부터 천천히 지식을 쌓아 나아간다면 추후에 밑빠진 독에 물을 넣는 실력이 아닌 탄탄한 실력으로 나아갈 수 있을 것 같기에 만족한다.