Skip to content

Commit 7b52f32

Browse files
authored
Merge pull request #14 from Neighbors-dev/develop
[FEAT] refresh token으로 access token 재발급 하는 로직 구현
2 parents 9857b7f + 3aa1ea8 commit 7b52f32

File tree

8 files changed

+90
-11
lines changed

8 files changed

+90
-11
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.neighbors.tohero.application.auth.dto;
2+
3+
import com.neighbors.tohero.common.jwt.AuthTokens;
4+
5+
public record ReissueTokenResponse(
6+
AuthTokens authTokens
7+
) {
8+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.neighbors.tohero.application.auth.service;
2+
3+
import com.neighbors.tohero.application.auth.dto.ReissueTokenResponse;
4+
import com.neighbors.tohero.application.baseResponse.BaseResponse;
5+
import com.neighbors.tohero.application.baseResponse.BaseResponseMessage;
6+
import com.neighbors.tohero.application.baseResponse.BaseResponseStatus;
7+
import com.neighbors.tohero.common.jwt.AuthTokens;
8+
import com.neighbors.tohero.common.jwt.JwtProvider;
9+
import com.neighbors.tohero.common.jwt.JwtUserDetails;
10+
import com.neighbors.tohero.domain.domain.user.model.User;
11+
import com.neighbors.tohero.domain.domain.user.service.GetUser;
12+
import lombok.RequiredArgsConstructor;
13+
import org.springframework.stereotype.Service;
14+
15+
@Service
16+
@RequiredArgsConstructor
17+
public class AuthService {
18+
19+
private final JwtProvider jwtProvider;
20+
private final GetUser getUser;
21+
22+
public BaseResponse<ReissueTokenResponse> reissueToken(String refreshToken){
23+
//TODO : Redis에 refreshToken 확인 작업
24+
jwtProvider.isExpiredToken(refreshToken);
25+
long userId = jwtProvider.getId(refreshToken);
26+
User user = getUser.getUserById(userId);
27+
AuthTokens authTokens = jwtProvider.createToken(JwtUserDetails.from(user));
28+
return new BaseResponse(
29+
BaseResponseStatus.OK,
30+
BaseResponseMessage.토큰_재발급이_성공했습니다.getMessage(),
31+
new ReissueTokenResponse(authTokens)
32+
);
33+
}
34+
}

src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ public enum BaseResponseMessage {
88
//oauth success
99
로그인_성공했습니다("로그인 성공했습니다"),
1010

11+
//auth
12+
토큰_재발급이_성공했습니다("토큰 재발급이 성공했습니다"),
13+
1114
//notice success
1215
공지_조회_성공했습니댜("공지 조회 성공했습니댜"),
1316

src/main/java/com/neighbors/tohero/common/jwt/JwtProvider.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public AuthTokens createToken(JwtUserDetails jwtUserDetails) {
3535

3636
claims.put("role", jwtUserDetails.getRole());
3737
if(jwtUserDetails.getRole() == Role.USER) {
38-
claims.put("userId", jwtUserDetails.getUserId());
38+
claims.put("id", jwtUserDetails.getUserId());
3939
claims.put("email", jwtUserDetails.getEmail());
4040
}
4141

@@ -87,20 +87,25 @@ public boolean isExpiredToken(String token) throws JwtInvalidTokenException {
8787
}
8888
}
8989

90-
public String getEmail(String token) {
90+
public String getNickname(String token) {
9191
return Jwts.parserBuilder()
9292
.setSigningKey(JWT_SECRET_KEY).build()
9393
.parseClaimsJws(token)
9494
.getBody()
9595
.getSubject();
9696
}
9797

98-
public Long getId(String token) {
99-
return Long.valueOf(Jwts.parserBuilder()
98+
public void loggingToken(String token) {
99+
Claims tokenInfo = Jwts.parserBuilder()
100100
.setSigningKey(JWT_SECRET_KEY).build()
101101
.parseClaimsJws(token)
102-
.getBody()
103-
.getId());
102+
.getBody();
103+
log.info("[JwtTokenProvider.loggingToken] token={}", tokenInfo);
104+
}
105+
106+
public Long getId(String token) {
107+
Claims claims = getBody(token);
108+
return Long.parseLong(claims.get("id").toString());
104109
}
105110

106111
private Claims getBody(String token) {

src/main/java/com/neighbors/tohero/domain/domain/user/service/GetUser.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ public class GetUser {
1111
private final UserRepository userRepository;
1212

1313
public User getUserByEmail(String email) {
14-
return userRepository.getUserByEmail(email);
14+
return userRepository.getUser(repo -> repo.findByEmail(email));
15+
}
16+
17+
public User getUserById(long userId) {
18+
return userRepository.getUser(repo -> repo.findByUserId(userId));
1519
}
1620
}

src/main/java/com/neighbors/tohero/domain/query/UserRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@
1010
public interface UserRepository {
1111
User createUser(User user);
1212
User updateUserName(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction, String nickname);
13-
User getUserByEmail(String email);
13+
User getUser(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction);
1414
}

src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class UserRepositoryImpl implements UserRepository {
2424
@Override
2525
public User createUser(User user) {
2626
try{
27-
return getUserByEmail(user.getEmail());
27+
return getUser(repo -> repo.findByEmail(user.getEmail()));
2828
}catch(UserException e){
2929
UserEntity userEntity = userMapper.toEntity(user);
3030
userEntityRepository.save(userEntity);
@@ -52,8 +52,8 @@ public User updateUserName(Function<UserEntityRepository, Optional<UserEntity>>
5252
}
5353

5454
@Override
55-
public User getUserByEmail(String email) {
56-
UserEntity userEntity = userEntityRepository.findByEmail(email)
55+
public User getUser(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction) {
56+
UserEntity userEntity = findUserFunction.apply(userEntityRepository)
5757
.orElseThrow(() -> new UserException(
5858
BaseResponseStatus.NO_RESULT,
5959
BaseResponseMessage.존재하지_않는_유저입니다.getMessage()
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.neighbors.tohero.presentation.controller;
2+
3+
import com.neighbors.tohero.application.auth.service.AuthService;
4+
import com.neighbors.tohero.application.baseResponse.BaseResponse;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.http.ResponseEntity;
7+
import org.springframework.web.bind.annotation.GetMapping;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.bind.annotation.RequestParam;
10+
import org.springframework.web.bind.annotation.RestController;
11+
12+
@RestController
13+
@RequiredArgsConstructor
14+
@RequestMapping("/")
15+
public class AuthController {
16+
17+
private final AuthService authService;
18+
19+
@GetMapping("/auth/refreshToken")
20+
public ResponseEntity<BaseResponse> refreshAccessToken(@RequestParam String refreshToken) {
21+
return ResponseEntity.ok()
22+
.body(authService.reissueToken(refreshToken));
23+
}
24+
25+
}

0 commit comments

Comments
 (0)