Skip to content
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

refresh 토큰 유효성 검증, 엑세스 토큰 재발급 API 구현 완료 #88

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.chzzk.cushion.member.application;

import static com.chzzk.cushion.global.exception.ErrorCode.INVALID_JWT_TOKEN;

import com.chzzk.cushion.global.exception.CushionException;
import com.chzzk.cushion.global.jwt.JwtTokenProvider;
import com.chzzk.cushion.member.domain.Member;
import com.chzzk.cushion.member.domain.MemberRepository;
import com.chzzk.cushion.member.dto.ApiMember;
Expand All @@ -23,6 +27,7 @@
public class MemberService {

private final MemberRepository memberRepository;
private final JwtTokenProvider jwtTokenProvider;

@Transactional
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
Expand Down Expand Up @@ -64,4 +69,30 @@ private void clearCookies(HttpServletRequest request, HttpServletResponse respon
log.info("쿠키가 존재하지 않습니다.");
}
}

public String reissueAccessToken(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
String name = cookie.getName();
if (name.equals("refreshToken")) {
String refreshToken = cookie.getValue();
Long memberId = jwtTokenProvider.extractMemberId(refreshToken);
jwtTokenProvider.validateToken(refreshToken);
return jwtTokenProvider.reissueAccessToken(refreshToken, memberId);
}
}
return null;
}

public boolean validateToken(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
String name = cookie.getName();
if (name.equals("refreshToken")) {
String refreshToken = cookie.getValue();
return jwtTokenProvider.validateToken(refreshToken);
}
}
throw new CushionException(INVALID_JWT_TOKEN);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,15 @@ public void deleteMember(HttpServletRequest request, HttpServletResponse respons

}

@GetMapping("/validate")
@Operation(summary = "토큰 유효성 검증", description = "토큰의 유효성을 검증합니다.")
public void validateToken(@Parameter(hidden = true) @RequestHeader("Authorization") String token) {
jwtTokenProvider.validateToken(token);
@GetMapping("/validate-token")
@Operation(summary = "refresh 토큰 유효성 검증", description = "refresh 토큰의 유효성을 검증합니다.")
public boolean validateToken(HttpServletRequest request) {
return memberService.validateToken(request);
}

@GetMapping("/reissue")
@Operation(summary = "액세스 토큰 재발급", description = "만료된 액세스 토큰을 재발급 받는다.")
public String reissueAccessToken(HttpServletRequest request) {
return memberService.reissueAccessToken(request);
}
}
Loading