Skip to content

Commit

Permalink
Merge pull request #50 from Capstone-Richam/feature/39-mail
Browse files Browse the repository at this point in the history
[feat]: Main 로그아웃, 예외처리 whitelist추가
  • Loading branch information
qogustj authored Dec 8, 2023
2 parents 6fd6724 + 2420948 commit 09819e5
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.Nunbody.domain.member.service.MemberService;

import com.Nunbody.global.common.SuccessResponse;
import com.Nunbody.global.config.auth.MemberId;
import com.Nunbody.token.OAuthToken;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -44,4 +45,9 @@ public ResponseEntity<SuccessResponse<?>> validateMember(@RequestBody ValidateRe
if(validateRequestDto.getAorn().equals("nickname"))memberService.validateName(validateRequestDto.getContent());
return SuccessResponse.ok(null);
}
@PatchMapping("/signout")
public ResponseEntity<SuccessResponse<?>> signOut(@MemberId final Long memberId) {
memberService.signOut(memberId);
return SuccessResponse.ok(null);
}
}
23 changes: 23 additions & 0 deletions src/main/java/com/Nunbody/domain/member/domain/RefreshToken.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.Nunbody.domain.member.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import org.springframework.data.annotation.Id;

@AllArgsConstructor
@Builder
@Getter
public class RefreshToken {
@Id
private Long id;
private String refreshToken;

public static RefreshToken createRefreshToken(Long userId, String refreshToken) {
return RefreshToken.builder()
.id(userId)
.refreshToken(refreshToken)
.build();
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.Nunbody.domain.member.repository;


import com.Nunbody.domain.member.domain.RefreshToken;
import org.springframework.data.repository.CrudRepository;

public interface RefreshTokenRepository extends CrudRepository<RefreshToken, Long> {
}

18 changes: 15 additions & 3 deletions src/main/java/com/Nunbody/domain/member/service/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
import com.Nunbody.domain.member.repository.KeywordRepository;
import com.Nunbody.domain.member.repository.MemberRepository;
import com.Nunbody.domain.member.dto.MemberRegisterRequestDto;
import com.Nunbody.domain.member.repository.RefreshTokenRepository;
import com.Nunbody.exception.auth.InvalidEmailException;
import com.Nunbody.exception.auth.InvalidPasswordException;
import com.Nunbody.global.error.exception.BusinessException;
import com.Nunbody.global.error.exception.EntityNotFoundException;
import com.Nunbody.global.error.exception.InvalidValueException;
import com.Nunbody.jwt.JwtTokenProvider;
import com.Nunbody.token.OAuthToken;
Expand All @@ -27,8 +29,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import static com.Nunbody.global.error.ErrorCode.ACCOUNT_EXISTS_ERROR;
import static com.Nunbody.global.error.ErrorCode.NAME_EXISTS_ERROR;
import static com.Nunbody.global.error.ErrorCode.*;

@Slf4j
@Service
Expand All @@ -40,7 +41,7 @@ public class MemberService {
private final JwtTokenProvider jwtTokenProvider;
private final PasswordEncoder passwordEncoder;
private final OAuthService oAuthService;

private final RefreshTokenRepository refreshTokenRepository;
public OAuthToken getOauthTokenWithCode(String socialLoginType, String code) throws JsonProcessingException {
ResponseEntity<String> accessTokenResponse = null;
if ("kakao".equals(socialLoginType)) {
Expand Down Expand Up @@ -116,4 +117,15 @@ public void validateName(String name){
// 이 예외 클래스는 RuntimeException 또는 다른 적절한 예외 클래스를 상속하여 정의해야 합니다.
}
}
public void signOut(Long memberId) {
Member member = getMember(memberId);
deleteRefreshToken(member);
}
private void deleteRefreshToken(Member member) {
member.updateRefreshToken(null);
refreshTokenRepository.deleteById(member.getId());
}
private Member getMember(Long memberId){
return memberRepository.findById(memberId).orElseThrow(() -> new EntityNotFoundException(MEMBER_NOT_FOUND));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class SpringSecurityConfig {
private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;
private final JwtTokenProvider tokenProvider;
private final CorsConfig corsConfig;
private static final String[] whiteList = {"/api/member/signup","/api/member/signin"};
private static final String[] whiteList = {"/api/member/signup","/api/member/signin","/api/member/validate","/api/mail/validate"};

@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/Nunbody/global/error/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public enum ErrorCode {
/**
* 404 Not Found
*/
MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 회원입니다."),
ENTITY_NOT_FOUND(HttpStatus.NOT_FOUND, "엔티티를 찾을 수 없습니다."),
/**
* 409 Conflict
Expand Down

0 comments on commit 09819e5

Please sign in to comment.