Skip to content

Commit

Permalink
Feat(#6): refreshToken 쿠키로 전송
Browse files Browse the repository at this point in the history
  • Loading branch information
dainshon committed Jul 26, 2024
1 parent 3a0c3ff commit 7f9d89e
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package inandout.backend.controller.login;


import com.fasterxml.jackson.databind.ObjectMapper;
import inandout.backend.dto.login.KakoLoginResponseDTO;
import inandout.backend.dto.login.LoginDTO;
import inandout.backend.entity.auth.Platform;
import inandout.backend.entity.member.Member;
import inandout.backend.entity.member.MemberStatus;
import inandout.backend.jwt.TokenInfo;
import inandout.backend.repository.login.MemberRepository;
import inandout.backend.service.login.KakaoLoginService;
import inandout.backend.service.login.RedisService;
import inandout.backend.service.login.user.UserService;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
Expand All @@ -18,12 +23,14 @@

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;


@RestController
@RequestMapping("/kakaologin")
public class KakaoLoginController {
private final Long refreshTokenValidTime = (60 * 1000L) * 60 * 24 * 7; // 7일

@Autowired
public KakaoLoginService kakaoLoginService;
Expand All @@ -32,6 +39,7 @@ public class KakaoLoginController {
@Autowired
public UserService userService;

private final ObjectMapper objectMapper = new ObjectMapper();

@GetMapping("")
public void KakaoLogin() {
Expand All @@ -40,7 +48,7 @@ public void KakaoLogin() {
}

@GetMapping("/callback")
public ResponseEntity<KakoLoginResponseDTO> KakaoLoginCallBack(@RequestParam(value = "code") String code, HttpServletResponse httpServletResponse) throws IOException {
public ResponseEntity<KakoLoginResponseDTO> KakaoLoginCallBack(@RequestParam(value = "code") String code, HttpServletResponse response) throws IOException {
System.out.println("KakaoLoginController/KakaoLoginCallBack");
KakoLoginResponseDTO kakoLoginResponseDTO = null;

Expand All @@ -56,14 +64,26 @@ public ResponseEntity<KakoLoginResponseDTO> KakaoLoginCallBack(@RequestParam(val
// email로 회원 찾기
Optional<Member> member = userService.findUser(email);

//쿠키생성
Map<String, String> cookieValues = new HashMap<>();
cookieValues.put("accessToken", accessToken);

String newRefreshToken;

if (member.isPresent()) { //회원 -> 로그인처리
System.out.println("회원임");
//redis에서 refreshToken 칮기
String prevRefreshToken = redisService.getRefreshToken(email);
kakoLoginResponseDTO = new KakoLoginResponseDTO(accessToken, prevRefreshToken,member.get().getName(), true);
System.out.println("이전 refreshToken: "+prevRefreshToken);

if (prevRefreshToken == null) {
newRefreshToken = refreshToken;
redisService.setValues(email, refreshToken);

return ResponseEntity.ok().body(kakoLoginResponseDTO);
} else {
newRefreshToken = prevRefreshToken;
}
kakoLoginResponseDTO = new KakoLoginResponseDTO(accessToken, newRefreshToken, member.get().getName(), true);

}else{ //비회원 ->가입
System.out.println("비회원임");
Expand All @@ -75,15 +95,28 @@ public ResponseEntity<KakoLoginResponseDTO> KakaoLoginCallBack(@RequestParam(val
loginDTO.setPassword("");
loginDTO.setPlatform(Platform.KAKAO);
loginDTO.setPlatformId("1");
loginDTO.setStatus(MemberStatus.INACTIVE);

newRefreshToken = refreshToken;
System.out.println("저장!");
userService.save(loginDTO);

//redis에 refreshToken 저장
redisService.setValues(email, refreshToken);
return ResponseEntity.ok().body(kakoLoginResponseDTO);

}

TokenInfo tokenInfo =TokenInfo.builder()
.grantType("Bearer")
.accessToken(accessToken)
.refreshToken(newRefreshToken)
.build();
response.addHeader("Authorization", tokenInfo.getGrantType() + " " + tokenInfo.getAccessToken());
response.setHeader("Set-Cookie","refreshToken=" + tokenInfo.getRefreshToken() + "; Path=/; HttpOnly; Secure; Max-Age=" + refreshTokenValidTime);


return ResponseEntity.ok().body(kakoLoginResponseDTO);

// //accessToken 만료되었는지 검사
// boolean isTokenValid = kakaoLoginService.isValidToken("KMXxzLPp_GjjTaMW1-3Z8t2GmCRxTqV9AAAAAQopyV8AAAGQplhQWxKZRqbpl2cW");
// System.out.println("accessToken 유효한지: "+isTokenValid);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/inandout/backend/dto/login/LoginDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class LoginDTO {
private String platformId;
// private LocalDateTime createdAt;
// private LocalDateTime updatedAt;
// private MemberStatus status;
private MemberStatus status;
// private boolean isPublic;


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,7 @@ public void updateNickname(String email, String nickname) {

Optional<Member> member = memberRepository.findByEmail(email);
member.ifPresent(value -> value.updateNickname(nickname));


}
}

0 comments on commit 7f9d89e

Please sign in to comment.