[클론 코딩] 네이버 카페 - 네이버 로그아웃
2024. 5. 11. 19:57ㆍProject/Naver Cafe
로그인 기능이 추가되었으니 이번엔 로그아웃 기능을 추가해보자. 우선 로그인시 생성되는 토큰을 사용해 로그인한 사용자라는 것을 확인하고 토큰정보를 복호화해 로그인 사용자의 계정 ID를 식별, 해당 사용자의 상태를 로그아웃으로 변경하고자 한다.
MemberController
package CloneCoding.NaverCafe.domain.member.controller;
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/member")
public class MemberController {
private final MemberService memberService;
@PutMapping("/logout/{token}")
public String logout(@PathVariable("token") String token) {
log.info("로그아웃 요청");
return memberService.logout(token);
}
}
컨트롤러에 로그아웃 요청을 받을 수 있도록 logout()을 추가했다. 해당 메서드는 URL에서 token 정보를 받아 memberService의 logout(String token)을 호출한다.
MemberServiceImpl
package CloneCoding.NaverCafe.domain.member.service;
import static CloneCoding.NaverCafe.message.SystemMessage.LOGOUT_COMPLETE;
import static CloneCoding.NaverCafe.security.LoginStatus.STATUS_LOGOUT;
@Service
@Transactional
@RequiredArgsConstructor
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
private final AesUtil aesUtil;
@Override
public String logout(String token) {
String accountId = aesUtil.aesDecode(token);
Member findMember = memberRepository.findByAccountId(accountId);
findMember.setLoginStatus(STATUS_LOGOUT.getStatus());
memberRepository.save(findMember);
return LOGOUT_COMPLETE.getMessage();
}
}
MemberService의 logout() 추상 메서드를 구현하였다. 전달 받은 토큰 정보를 복호화해 해당 토큰 사용자의 계정 ID를 식별한 후, 사용자 정보를 조회, 사용자 상태를 로그아웃으로 변경한 후 DB에 반영하고 로그아웃 완료 메시지를 반환한다.
QueryMemberRepositoryImpl
package CloneCoding.NaverCafe.domain.member.repository;
import static CloneCoding.NaverCafe.domain.member.QMember.*;
@Repository
@RequiredArgsConstructor
public class QueryMemberRepositoryImpl implements QueryMemberRepository {
private final JPAQueryFactory query;
@Override
public Member findByAccountId(String accountId) {
return Optional.ofNullable(query
.selectFrom(member)
.where(member.accountId.eq(accountId))
.fetchOne())
.orElseThrow(() -> new NoSuchElementException("유효하지 않은 접근입니다."));
}
}
QueryMemberRepository의 findByAccountId() 추상 메서드를 구현하였다. 해당 메서드는 사용자의 계정 ID를 통해 사용자 정보를 조회하며 조회한 사용자 정보를 Member 객체로 반환한다.
SystemMessage
package CloneCoding.NaverCafe.message;
@Getter
@RequiredArgsConstructor
public enum SystemMessage {
LOGOUT_COMPLETE("정상적으로 로그아웃이 완료되었습니다!")
;
private final String message;
}
시스템 메시지를 상수로 가지는 Enum 클래스에 로그아웃 완료 메시지를 추가하였다.
API TEST
API 요청 URL에 로그인시 생성된 토큰을 담아 로그아웃을 요청하니 정상적으로 완료 메시지가 출력되는 것을 확인할 수 있었다. DB 상에서도 "login"이었던 STATUS가 "logout"으로 바뀐 것을 확인하였다.
'Project > Naver Cafe' 카테고리의 다른 글
[클론 코딩] 네이버 카페 - 네이버 회원 탈퇴 (0) | 2024.05.12 |
---|---|
[클론 코딩] 네이버 카페 - 네이버 회원 정보 수정 (0) | 2024.05.12 |
[클론 코딩] 네이버 카페 - 네이버 로그인 (0) | 2024.05.10 |
[클론 코딩] 네이버 카페 - 네이버 회원 정보 조회(읽기) (0) | 2024.05.03 |
[클론 코딩] 네이버 카페 - 예외 처리 (0) | 2024.05.02 |