Skip to content

Commit

Permalink
fix: Modify logout error (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
Ahyun0326 committed Mar 18, 2024
1 parent fcea8f5 commit 55b4826
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 57 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
package com.beotkkot.qtudy.controller.auth;

import com.beotkkot.qtudy.domain.user.Users;
import com.beotkkot.qtudy.dto.auth.KakaoUserInfo;
import com.beotkkot.qtudy.dto.auth.UserResponse;
import com.beotkkot.qtudy.dto.object.KakaoUserInfo;
import com.beotkkot.qtudy.dto.response.auth.AuthResponseDto;
import com.beotkkot.qtudy.dto.response.auth.GetAuthResponseDto;
import com.beotkkot.qtudy.service.auth.AuthService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/auth/kakao")
@RequiredArgsConstructor
Expand All @@ -21,48 +18,39 @@ public class AuthController {

// ํ”„๋ก ํŠธ๋กœ๋ถ€ํ„ฐ ์ธ๊ฐ€ code๋ฅผ ๋ฐ›์•„์™€ ์นด์นด์˜ค ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ† ํฐ ์–ป๊ธฐ
@GetMapping("")
public ResponseEntity<Object> kakaoLogin(@RequestParam("code") String code) {
public ResponseEntity<? super GetAuthResponseDto> kakaoLogin(@RequestParam("code") String code) {

System.out.println("code = " + code);

// 1. ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์นด์นด์˜ค ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ† ํฐ์„ ์–ป๋Š”๋‹ค
String accessToken = authService.getAccessToken(code);
if (accessToken.equals("")) {
return GetAuthResponseDto.noAuthentication();
}

// 2. ๋ฐœ๊ธ‰๋ฐ›์€ ํ† ํฐ์„ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์กฐํšŒ
KakaoUserInfo kakaoUserInfo = authService.getKakaoUserInfo(accessToken);

// 3. ๋กœ๊ทธ์ธ
Users user = authService.login(kakaoUserInfo);

// 4. ์œ ์ € ์ •๋ณด ๋ฆฌํ„ด
UserResponse userResponse = new UserResponse(
"SU",
"Sucess",
user.getUserId(),
user.getKakaoId(),
user.getName(),
user.getProfileImageUrl(),
accessToken
);
return ResponseEntity.status(HttpStatus.OK).body(userResponse);
if (kakaoUserInfo == null) {
return GetAuthResponseDto.noExistUser();

} else {
// 3. ๋กœ๊ทธ์ธ
Users user = authService.login(kakaoUserInfo);
// 4. ์œ ์ € ์ •๋ณด ๋ฆฌํ„ด
return GetAuthResponseDto.success(user, accessToken);
}
}

@PostMapping("/logout")
public ResponseEntity<Map<String,String>> logout(@RequestHeader("Authorization") String header) {

System.out.println("header = " + header);
public ResponseEntity<? super AuthResponseDto> logout(@RequestHeader("Authorization") String accessToken) {

String[] authHeader = header.split(" ");
// ํ—ค๋”์—์„œ ํ† ํฐ ์ถ”์ถœ
String accessToken = authHeader[1];
System.out.println("accessToken = " + accessToken);

// ํ† ํฐ์„ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌ
authService.logout(accessToken);
ResponseEntity<? super AuthResponseDto> response = authService.logout(accessToken);

// ๋กœ๊ทธ์•„์›ƒ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜
Map<String, String> response = new HashMap<>();
response.put("code", "SU");
response.put("message", "Success");
return ResponseEntity.ok(response);
// ๋กœ๊ทธ์•„์›ƒ ์‘๋‹ต ๋ฐ˜ํ™˜
return response;
}
}
83 changes: 59 additions & 24 deletions src/main/java/com/beotkkot/qtudy/service/auth/AuthService.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,28 @@
package com.beotkkot.qtudy.service.auth;

import com.beotkkot.qtudy.domain.user.Users;
import com.beotkkot.qtudy.dto.auth.KakaoUserInfo;
import com.beotkkot.qtudy.dto.object.KakaoUserInfo;
import com.beotkkot.qtudy.dto.response.ResponseDto;
import com.beotkkot.qtudy.dto.response.auth.AuthResponseDto;
import com.beotkkot.qtudy.service.user.UserService;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.client.RestTemplate;

@Service
@Slf4j
@RequiredArgsConstructor
public class AuthService {

Expand All @@ -28,6 +34,8 @@ public String getAccessToken(String code) {
String accessToken = "";
String requestURL = "https://kauth.kakao.com/oauth/token";

ResponseEntity<String> response;

RestTemplate rt = new RestTemplate();

// HttpHeader
Expand All @@ -44,14 +52,19 @@ public String getAccessToken(String code) {
// header, body๋ฅผ ๊ฐ€์ง„ ์—”ํ‹ฐํ‹ฐ
HttpEntity<MultiValueMap<String, String>> tokenRequest = new HttpEntity<>(params, headers);

ResponseEntity<String> response = rt.exchange(requestURL, HttpMethod.POST, tokenRequest, String.class);
try {
response = rt.exchange(requestURL, HttpMethod.POST, tokenRequest, String.class);
String responseBody = response.getBody();
System.out.println("responseBody = " + responseBody);

String responseBody = response.getBody();
System.out.println("responseBody = " + responseBody);
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(responseBody);
accessToken = element.getAsJsonObject().get("access_token").getAsString();

JsonParser parser = new JsonParser();
JsonElement element = parser.parse(responseBody);
accessToken = element.getAsJsonObject().get("access_token").getAsString();
} catch (Exception exception) {
log.info("error message: " + exception.getMessage());
return accessToken;
}

return accessToken;
}
Expand All @@ -60,6 +73,7 @@ public String getAccessToken(String code) {
public KakaoUserInfo getKakaoUserInfo(String accessToken) {

String requestURL = "https://kapi.kakao.com/v2/user/me";
ResponseEntity<String> response;

RestTemplate rt = new RestTemplate();

Expand All @@ -70,23 +84,29 @@ public KakaoUserInfo getKakaoUserInfo(String accessToken) {

// header๋ฅผ ๊ฐ€์ง„ ์—”ํ‹ฐํ‹ฐ
HttpEntity<MultiValueMap<String, String>> kakaoUserInfoRequest = new HttpEntity<>(headers);
ResponseEntity<String> response = rt.exchange(requestURL, HttpMethod.POST, kakaoUserInfoRequest, String.class);
try {
response = rt.exchange(requestURL, HttpMethod.POST, kakaoUserInfoRequest, String.class);

String responseBody = response.getBody();
System.out.println("responseBody = " + responseBody);
String responseBody = response.getBody();
System.out.println("responseBody = " + responseBody);

JsonParser parser = new JsonParser();
JsonElement element = parser.parse(responseBody);
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(responseBody);

// ์œ ์ € ์ •๋ณด ์ถ”์ถœ
Long id = element.getAsJsonObject().get("id").getAsLong();
JsonObject properties = element.getAsJsonObject().get("properties").getAsJsonObject();
System.out.println("properties = " + properties);
String name = properties.getAsJsonObject().get("nickname").getAsString();
String profileImageUrl = properties.getAsJsonObject().get("profile_image").getAsString();
// ์œ ์ € ์ •๋ณด ์ถ”์ถœ
Long id = element.getAsJsonObject().get("id").getAsLong();
JsonObject properties = element.getAsJsonObject().get("properties").getAsJsonObject();
System.out.println("properties = " + properties);
String name = properties.getAsJsonObject().get("nickname").getAsString();
String profileImageUrl = properties.getAsJsonObject().get("profile_image").getAsString();

// ์นด์นด์˜ค ์œ ์ € ์ •๋ณด ์ƒ์„ฑํ•ด์„œ ๋ฆฌํ„ด
return new KakaoUserInfo(id, name, profileImageUrl, accessToken);
// ์นด์นด์˜ค ์œ ์ € ์ •๋ณด ์ƒ์„ฑํ•ด์„œ ๋ฆฌํ„ด
return new KakaoUserInfo(id, name, profileImageUrl, accessToken);

} catch (Exception exception) {
log.info("error message: " + exception.getMessage());
return null;
}
}

// 3. ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ DB์—์„œ ์กฐํšŒํ•˜๊ณ , ๊ฐ€์ž…๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๋ผ๋ฉด DB์— ์ €์žฅ ํ›„ ํ•ด๋‹น ์‚ฌ์šฉ์ž ๋ฐ˜ํ™˜
Expand All @@ -105,9 +125,11 @@ public Users login(KakaoUserInfo kakaoUserInfo) {
return findUser;
}

public void logout(String accessToken) {
public ResponseEntity<? super AuthResponseDto> logout(String accessToken) {
String requestURL = "https://kapi.kakao.com/v1/user/logout";

ResponseEntity<String> response;

RestTemplate rt = new RestTemplate();

// HttpHeader
Expand All @@ -116,9 +138,22 @@ public void logout(String accessToken) {

// header๋ฅผ ๊ฐ€์ง„ ์—”ํ‹ฐํ‹ฐ
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(headers);
ResponseEntity<String> response = rt.exchange(requestURL, HttpMethod.POST, request, String.class);

String responseBody = response.getBody();

try {
response = rt.exchange(requestURL, HttpMethod.POST, request, String.class);
System.out.println(response.getBody());
} catch (HttpClientErrorException exception) {
// 4xx ์—๋Ÿฌ (ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜) ์ฒ˜๋ฆฌ
log.info("error message: " + exception.getMessage());
return AuthResponseDto.noAuthentication();
} catch (HttpServerErrorException exception) {
// 5xx ์—๋Ÿฌ (์„œ๋ฒ„ ์˜ค๋ฅ˜) ์ฒ˜๋ฆฌ
log.info("error message: " + exception.getMessage());
return ResponseDto.databaseError();
} catch (Exception exception) {
// ๊ทธ ์™ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
log.info("error message: " + exception.getMessage());
}
return AuthResponseDto.success();
}
}

0 comments on commit 55b4826

Please sign in to comment.