feat(로그아웃 및 점주 정보 API 구현): 고객 고유번호 리스트로 고객 가져오기 테스트
- 리프레시 토큰이 제대로 삭제되지 않는 문제 해결 (Path 및 maxAge 값 설정) - 점주 고유번호로 점주 정보 가져오는 API 추가
This commit is contained in:
@@ -54,13 +54,15 @@ public class RefreshTokenServiceImpl implements RefreshTokenService {
|
|||||||
|
|
||||||
// refresh token 검증
|
// refresh token 검증
|
||||||
String findRefreshTokenId = findRefreshToken.getRefreshTokenId();
|
String findRefreshTokenId = findRefreshToken.getRefreshTokenId();
|
||||||
if (!jwtTokenProvider.validateJwtToken(refreshToken) ||
|
if (!jwtTokenProvider.validateJwtToken(refreshToken)) {
|
||||||
!jwtTokenProvider.equalRefreshTokenId(findRefreshTokenId, refreshToken)) {
|
|
||||||
|
|
||||||
refreshTokenRedisRepository.delete(findRefreshToken);
|
refreshTokenRedisRepository.delete(findRefreshToken);
|
||||||
throw new RefreshTokenNotValidException("Not validate jwt token = " + refreshToken);
|
throw new RefreshTokenNotValidException("Not validate jwt token = " + refreshToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!jwtTokenProvider.equalRefreshTokenId(findRefreshTokenId, refreshToken)) {
|
||||||
|
throw new RefreshTokenNotValidException("redis 의 값과 일치하지 않습니다. = " + refreshToken);
|
||||||
|
}
|
||||||
|
|
||||||
User findUser = userRepository.findById(Long.valueOf(userId))
|
User findUser = userRepository.findById(Long.valueOf(userId))
|
||||||
.orElseThrow(() -> new NotExistUserException("유저 고유 번호 : " + userId + "는 없는 유저입니다."));
|
.orElseThrow(() -> new NotExistUserException("유저 고유 번호 : " + userId + "는 없는 유저입니다."));
|
||||||
|
|
||||||
@@ -69,7 +71,7 @@ public class RefreshTokenServiceImpl implements RefreshTokenService {
|
|||||||
List<String> roles = authentication.getAuthorities()
|
List<String> roles = authentication.getAuthorities()
|
||||||
.stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());
|
.stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());
|
||||||
|
|
||||||
String newAccessToken = jwtTokenProvider.createJwtAccessToken(userId, "/refreshToken", roles);
|
String newAccessToken = jwtTokenProvider.createJwtAccessToken(userId, "/reissu", roles);
|
||||||
Date expiredTime = jwtTokenProvider.getExpiredTime(newAccessToken);
|
Date expiredTime = jwtTokenProvider.getExpiredTime(newAccessToken);
|
||||||
|
|
||||||
return JwtTokenDto.builder()
|
return JwtTokenDto.builder()
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ public class AuthController {
|
|||||||
private final CookieProvider cookieProvider;
|
private final CookieProvider cookieProvider;
|
||||||
|
|
||||||
@GetMapping("/reissue")
|
@GetMapping("/reissue")
|
||||||
public ResponseEntity<Result> refreshToken(@RequestHeader("X-AUTH-TOKEN") String accessToken,
|
public ResponseEntity<Result> refreshToken(@RequestHeader(value = "X-AUTH-TOKEN") String accessToken,
|
||||||
@CookieValue("refresh-token") String refreshToken) {
|
@CookieValue(value = "refresh-token") String refreshToken) {
|
||||||
JwtTokenDto jwtTokenDto = refreshTokenService.refreshJwtToken(accessToken, refreshToken);
|
JwtTokenDto jwtTokenDto = refreshTokenService.refreshJwtToken(accessToken, refreshToken);
|
||||||
|
|
||||||
ResponseCookie responseCookie = cookieProvider.createRefreshTokenCookie(refreshToken);
|
ResponseCookie responseCookie = cookieProvider.createRefreshTokenCookie(refreshToken);
|
||||||
@@ -55,8 +55,7 @@ public class AuthController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/logout")
|
@PostMapping("/logout")
|
||||||
public ResponseEntity<Result> logout(@RequestHeader("X-AUTH-TOKEN") String accessToken,
|
public ResponseEntity<Result> logout(@RequestHeader("X-AUTH-TOKEN") String accessToken) {
|
||||||
@RequestHeader("REFRESH-TOKEN") String refreshToken) {
|
|
||||||
|
|
||||||
refreshTokenService.logoutToken(accessToken);
|
refreshTokenService.logoutToken(accessToken);
|
||||||
|
|
||||||
@@ -64,7 +63,7 @@ public class AuthController {
|
|||||||
|
|
||||||
return ResponseEntity.status(HttpStatus.OK)
|
return ResponseEntity.status(HttpStatus.OK)
|
||||||
.header(HttpHeaders.SET_COOKIE, refreshCookie.toString())
|
.header(HttpHeaders.SET_COOKIE, refreshCookie.toString())
|
||||||
.body(Result.createErrorResult(""));
|
.body(Result.createSuccessResult(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/check/access-token")
|
@GetMapping("/check/access-token")
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ public class CustomerDto extends UserDto {
|
|||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
public CustomerDto(Long id, String email, String password, String name,
|
public CustomerDto(Long id, String email, String password, String name,
|
||||||
String phoneNumber, String dtype, String refreshTokenId) {
|
String phoneNumber, String dtype) {
|
||||||
super(id, email, password, name, phoneNumber, dtype, refreshTokenId);
|
super(id, email, password, name, phoneNumber, dtype);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.justpickup.userservice.domain.user.dto;
|
package com.justpickup.userservice.domain.user.dto;
|
||||||
|
|
||||||
|
import com.justpickup.userservice.domain.user.entity.StoreOwner;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -9,8 +10,13 @@ public class StoreOwnerDto extends UserDto {
|
|||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
public StoreOwnerDto(Long id, String email, String password, String name,
|
public StoreOwnerDto(Long id, String email, String password, String name,
|
||||||
String phoneNumber, String dtype, String businessNumber, String refreshTokenId) {
|
String phoneNumber, String dtype, String businessNumber) {
|
||||||
super(id, email, password, name, phoneNumber, dtype, refreshTokenId);
|
super(id, email, password, name, phoneNumber, dtype);
|
||||||
this.businessNumber = businessNumber;
|
this.businessNumber = businessNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static StoreOwnerDto of(StoreOwner storeOwner) {
|
||||||
|
return new StoreOwnerDto(storeOwner.getId(), storeOwner.getEmail(), storeOwner.getPassword(),
|
||||||
|
storeOwner.getName(), storeOwner.getPhoneNumber(), storeOwner.getDtype(), storeOwner.getBusinessNumber());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ public abstract class UserDto {
|
|||||||
private String name;
|
private String name;
|
||||||
private String phoneNumber;
|
private String phoneNumber;
|
||||||
private String dtype;
|
private String dtype;
|
||||||
private String refreshTokenId;
|
|
||||||
|
|
||||||
// == 생성 메소드 == //
|
// == 생성 메소드 == //
|
||||||
public UserDto(Customer customer) {
|
public UserDto(Customer customer) {
|
||||||
@@ -23,13 +22,12 @@ public abstract class UserDto {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public UserDto(Long id, String email, String password, String name, String phoneNumber,
|
public UserDto(Long id, String email, String password, String name, String phoneNumber,
|
||||||
String dtype, String refreshTokenId) {
|
String dtype) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.email = email;
|
this.email = email;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.phoneNumber = phoneNumber;
|
this.phoneNumber = phoneNumber;
|
||||||
this.dtype = dtype;
|
this.dtype = dtype;
|
||||||
this.refreshTokenId = refreshTokenId;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ public interface UserService {
|
|||||||
CustomerDto findCustomerByUserId(Long userId);
|
CustomerDto findCustomerByUserId(Long userId);
|
||||||
void saveStoreOwner(StoreOwnerDto storeOwnerDto);
|
void saveStoreOwner(StoreOwnerDto storeOwnerDto);
|
||||||
List<CustomerDto> findCustomerByUserIds(List<Long> userIds);
|
List<CustomerDto> findCustomerByUserIds(List<Long> userIds);
|
||||||
|
StoreOwnerDto findOwnerById(Long userId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import com.justpickup.userservice.domain.user.entity.User;
|
|||||||
import com.justpickup.userservice.domain.user.exception.DuplicateUserEmail;
|
import com.justpickup.userservice.domain.user.exception.DuplicateUserEmail;
|
||||||
import com.justpickup.userservice.domain.user.exception.NotExistUserException;
|
import com.justpickup.userservice.domain.user.exception.NotExistUserException;
|
||||||
import com.justpickup.userservice.domain.user.repository.CustomerRepository;
|
import com.justpickup.userservice.domain.user.repository.CustomerRepository;
|
||||||
|
import com.justpickup.userservice.domain.user.repository.StoreOwnerRepository;
|
||||||
import com.justpickup.userservice.domain.user.repository.UserRepository;
|
import com.justpickup.userservice.domain.user.repository.UserRepository;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -32,6 +33,7 @@ import java.util.stream.Collectors;
|
|||||||
public class UserServiceImpl implements UserService, UserDetailsService {
|
public class UserServiceImpl implements UserService, UserDetailsService {
|
||||||
|
|
||||||
private final CustomerRepository customerRepository;
|
private final CustomerRepository customerRepository;
|
||||||
|
private final StoreOwnerRepository storeOwnerRepository;
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
private final PasswordEncoder passwordEncoder;
|
private final PasswordEncoder passwordEncoder;
|
||||||
|
|
||||||
@@ -77,4 +79,12 @@ public class UserServiceImpl implements UserService, UserDetailsService {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StoreOwnerDto findOwnerById(Long userId) {
|
||||||
|
StoreOwner storeOwner = storeOwnerRepository.findById(userId)
|
||||||
|
.orElseThrow(() -> new NotExistUserException(userId + "는 존재하지 않은 사용자입니다."));
|
||||||
|
|
||||||
|
return StoreOwnerDto.of(storeOwner);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ public class UserController {
|
|||||||
|
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
|
|
||||||
@GetMapping("/customer/")
|
@GetMapping("/customer")
|
||||||
public ResponseEntity getCustomerByToken(@Valid @RequestHeader(value = "user-id") String userId ) {
|
public ResponseEntity getCustomerByToken(@Valid @RequestHeader(value="user-id") String userId) {
|
||||||
|
|
||||||
CustomerDto customerDto = userService.findCustomerByUserId(Long.parseLong(userId));
|
CustomerDto customerDto = userService.findCustomerByUserId(Long.parseLong(userId));
|
||||||
|
|
||||||
@@ -90,6 +90,26 @@ public class UserController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/store-owner")
|
||||||
|
public ResponseEntity<Result> getStoreOwnerByToken(@RequestHeader(value="user-id") String userHeader) {
|
||||||
|
Long userId = Long.valueOf(userHeader);
|
||||||
|
|
||||||
|
StoreOwnerDto storeOwnerDto = userService.findOwnerById(userId);
|
||||||
|
|
||||||
|
return ResponseEntity.ok(Result.createSuccessResult(storeOwnerDto));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
static class StoreOwnerByTokenResponse {
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public StoreOwnerByTokenResponse(StoreOwnerDto dto) {
|
||||||
|
this.id = dto.getId();
|
||||||
|
this.name = dto.getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/store-owner")
|
@PostMapping("/store-owner")
|
||||||
public ResponseEntity<Result> joinStoreOwner(@Valid @RequestBody JoinStoreOwnerRequest joinRequest) {
|
public ResponseEntity<Result> joinStoreOwner(@Valid @RequestBody JoinStoreOwnerRequest joinRequest) {
|
||||||
// 회원 가입
|
// 회원 가입
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ public class CookieProvider {
|
|||||||
|
|
||||||
public ResponseCookie removeRefreshTokenCookie() {
|
public ResponseCookie removeRefreshTokenCookie() {
|
||||||
return ResponseCookie.from("refresh-token", null)
|
return ResponseCookie.from("refresh-token", null)
|
||||||
|
.maxAge(0)
|
||||||
|
.path("/")
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user