-
Notifications
You must be signed in to change notification settings - Fork 4
[feat] 로그인 완료 후 회원 정보 조회시 Access · RefreshToken 반환 #98
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
f614c11
ccd34e2
c93535e
b77a3f9
abc845d
0ac5139
63540aa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| package com.arom.with_travel.domain.member.dto; | ||
|
|
||
| import com.arom.with_travel.global.jwt.dto.response.AuthTokenResponse; | ||
| import com.nimbusds.oauth2.sdk.TokenResponse; | ||
| import lombok.AllArgsConstructor; | ||
| import lombok.Getter; | ||
| import lombok.Setter; | ||
|
|
||
| @Getter | ||
| @Setter | ||
LEEDONGH00N marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| @AllArgsConstructor | ||
| public class MemberSignupTokenResponse { | ||
| private MemberSignupResponseDto memberSignupDto; | ||
| private AuthTokenResponse tokenDto; | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| package com.arom.with_travel.global.jwt.dto.response; | ||
|
|
||
| import lombok.AllArgsConstructor; | ||
| import lombok.Getter; | ||
| import lombok.Setter; | ||
|
|
||
| @Getter | ||
| @Setter | ||
LEEDONGH00N marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| @AllArgsConstructor | ||
| public class AuthTokenResponse { | ||
| private String accessToken; | ||
| private String refreshToken; | ||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -2,14 +2,18 @@ | |||||
|
|
||||||
| import com.arom.with_travel.domain.member.Member; | ||||||
| import com.arom.with_travel.domain.member.service.MemberService; | ||||||
| import com.arom.with_travel.domain.member.service.MemberSignupService; | ||||||
| import com.arom.with_travel.global.exception.BaseException; | ||||||
| import com.arom.with_travel.global.exception.error.ErrorCode; | ||||||
| import com.arom.with_travel.global.jwt.config.JwtProperties; | ||||||
| import com.arom.with_travel.global.jwt.domain.RefreshToken; | ||||||
| import com.arom.with_travel.global.jwt.dto.response.AuthTokenResponse; | ||||||
| import com.arom.with_travel.global.jwt.repository.RefreshTokenRepository; | ||||||
| import jakarta.servlet.http.HttpServletResponse; | ||||||
| import jakarta.transaction.Transactional; | ||||||
| import lombok.RequiredArgsConstructor; | ||||||
| import lombok.extern.slf4j.Slf4j; | ||||||
| import org.springframework.http.HttpHeaders; | ||||||
| import org.springframework.http.ResponseCookie; | ||||||
| import org.springframework.stereotype.Service; | ||||||
|
|
||||||
| import java.time.Duration; | ||||||
|
|
@@ -24,7 +28,7 @@ public class TokenService { | |||||
| private final RefreshTokenService refreshTokenService; | ||||||
| private final MemberService memberService; | ||||||
| private final RefreshTokenRepository refreshTokenRepository; | ||||||
| private final MemberSignupService memberSignupService; | ||||||
| private final JwtProperties jwtProperties; | ||||||
|
|
||||||
| // 새로운 액세스 토큰 생성 | ||||||
| public String createNewAccessToken(String refreshToken) { | ||||||
|
|
@@ -51,4 +55,30 @@ public void validateRefreshTokenOrElseThrow(String refreshToken) { | |||||
| throw BaseException.from(ErrorCode.INVALID_TOKEN); | ||||||
| } | ||||||
| } | ||||||
|
|
||||||
| public AuthTokenResponse issueTokenPair(String loginEmail, HttpServletResponse response) { | ||||||
|
|
||||||
| Member member = memberService.getUserByLoginEmailOrElseThrow(loginEmail); | ||||||
|
|
||||||
| String accessToken = tokenProvider.generateToken( | ||||||
| member, | ||||||
| Duration.ofHours(jwtProperties.getAccessTokenExpireHours()) | ||||||
| ); | ||||||
|
|
||||||
| String refreshToken = tokenProvider.generateToken( | ||||||
| member, | ||||||
| Duration.ofDays(jwtProperties.getRefreshTokenExpireDays()) | ||||||
| ); | ||||||
|
|
||||||
| // HttpOnly 쿠키 설정 | ||||||
| ResponseCookie cookie = ResponseCookie.from(jwtProperties.getRefreshCookieName(), refreshToken) | ||||||
| .httpOnly(true) | ||||||
| .secure(true) | ||||||
| .path("/") | ||||||
| .maxAge(Duration.ofDays(jwtProperties.getRefreshTokenExpireDays())) | ||||||
| .build(); | ||||||
| response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString()); | ||||||
|
Comment on lines
+74
to
+80
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 쿠키 설정 없이 문자열만 있으면 될 것 같습니다. |
||||||
|
|
||||||
| return new AuthTokenResponse(accessToken, refreshToken); | ||||||
|
||||||
| return new AuthTokenResponse(accessToken, refreshToken); | |
| return new AuthTokenResponse(accessToken); |
Uh oh!
There was an error while loading. Please reload this page.