문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.
앱 id :962290
const KAKAO_CLIENT_ID = '.env';
const KAKAO_REDIRECT_URI = '.env';
const KAKAO_AUTH_URI = `https://kauth.kakao.com/oauth/authorize?client_id=${KAKAO_CLIENT_ID}&redirect_uri=${KAKAO_REDIRECT_URI}&response_type=code`;
const handleSocialLogin = async () => {
window.location.href = KAKAO_AUTH_URI;
};
를 통해 로그인 버튼을 누르면 리다이렉트 페이지로 이동되게 했습니다.
이 아래는 리다이렉트 페이지를 routh 한 코드입니다.
import { useEffect } from 'react';
import axios from 'axios';
const Kakao = () => {
useEffect(() => {
const getCodeFromURL = async () => {
const code = new URL(window.location.href).searchParams.get('code');
if (code) {
try {
const response = await axios.get(
`{서버api 주소}?code=${code}`,
);
if (response.status === 200) {
const data = response.data;
console.log('data', data);
// if (data.loginSuccess) {
// const member = data.member;
// // Handle successful login here
// console.log('Logged in successfully:', member);
// } else {
// // Handle the case where login was not successful
// console.error('Login failed:', data.errorMessage);
// }
} else {
console.error('API call failed:', response.statusText);
}
} catch (error) {
console.error('API call error:', error);
}
} else {
console.log('No code found in the URL.');
}
};
getCodeFromURL();
}, []);
return (
<div className="LoginHandler">
<div className="notice">
<p>로그인 중입니다.</p>
<p>잠시만 기다려주세요.</p>
<div className="spinner"></div>
</div>
</div>
);
};
export default Kakao;
이렇게 진행하면 개발자탭에 네트워크에서는 get 요청이 200이 뜨는것을 확인 할 수 있었는데 로컬 서버를 확인 하면 500에러가 뜨고 백에서 에러 코드를 확인하면 400에러가 뜨게 되면서 response 값에 오류가 뜨는 것을 확인하였는데 어떤 코드가 문제가 되는 것인지 알수 있을까요 ?
안녕하세요.
접근토큰 발급 받는 코드와 오류 내용을 제공 부탁드립니다.
프론트에서 작동하는 코드는 이게 전체이고
response를 콘솔로 찍어보면
{data: ‘\n\n \n <…QiLCJ0aXRsZSI6Ik9LIn0=">\n \n\n’, status: 200, statusText: ‘’, headers: AxiosHeaders, config: {…}, …}
config
:
{transitional: {…}, adapter: ‘xhr’, transformRequest: Array(1), transformResponse: Array(1), timeout: 0, …}
data
:
“\n<html lang="en-US">\n \n <meta charset="utf-8">\n <meta name="author" content="ngrok">\n <meta name="description" content="ngrok is the fastest way to put anything on the internet with a single command.">\n <meta name="robots" content="noindex, nofollow">\n <meta name="viewport" content="width=device-width, initial-scale=1">\n <link id="style" rel="stylesheet" href="https://cdn.ngrok.com/static/css/error.css\”>\n You are about to visit 3e9c-222-96-41-224.ngrok-free.app, served by 222.96.41.224. This website is served for free through ngrok.com. You should only visit this website if you trust whoever sent the link to you. (ERR_NGROK_6024)\n <script id="script" src="https://cdn.ngrok.com/static/js/error.js\" type="text/javascript">\n \n <body id="ngrok">\n <div id="root" data-payload="eyJjZG5CYXNlIjoiaHR0cHM6Ly9jZG4ubmdyb2suY29tLyIsImNvZGUiOiI2MDI0IiwiaG9zdHBvcnQiOiIzZTljLTIyMi05Ni00MS0yMjQubmdyb2stZnJlZS5hcHAiLCJtZXNzYWdlIjoiWW91IGFyZSBhYm91dCB0byB2aXNpdCAzZTljLTIyMi05Ni00MS0yMjQubmdyb2stZnJlZS5hcHAsIHNlcnZlZCBieSAyMjIuOTYuNDEuMjI0LiBUaGlzIHdlYnNpdGUgaXMgc2VydmVkIGZvciBmcmVlIHRocm91Z2ggbmdyb2suY29tLiBZb3Ugc2hvdWxkIG9ubHkgdmlzaXQgdGhpcyB3ZWJzaXRlIGlmIHlvdSB0cnVzdCB3aG9ldmVyIHNlbnQgdGhlIGxpbmsgdG8geW91LiIsInNlcnZpbmdJUCI6IjIyMi45Ni40MS4yMjQiLCJ0aXRsZSI6Ik9LIn0=">\n \n\n"
headers
:
AxiosHeaders {content-length: ‘1380’, content-type: ‘text/html’}
request
:
XMLHttpRequest {onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, …}
status
:
200
statusText
:
“”
[[Prototype]]
:
Object 이렇게 나옵니다. 그리고 400에러에서는 바디값이 비어있다고 나온다고 합니다 .
접근 토큰 발급 코드는 백코드를 확인해봐야할까요 ?
이 요청을 처리하는 서비스측 백앤드 코드 부탁드립니다.
package com.codestates.server.global.security.oauth2.controller;
import com.codestates.server.global.security.oauth2.dto.KakaoLoginResponseDto;
import com.codestates.server.global.security.oauth2.service.KakaoOAuthService;
import lombok.AllArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@AllArgsConstructor
public class KakaoOAuthController {
private final KakaoOAuthService kakaoOAuthService;
/**
* 카카오 code 콜백 컨트롤러
*
* @param code
* @return
*/
@GetMapping("/login/oauth/code/kakao")
public ResponseEntity<KakaoLoginResponseDto> handleKakaoCallback(@RequestParam("code") String code) {
// 프론트에서 받아온 code로 카카오에서 AccessToken 받기
String kakaoAccessToken = String.valueOf(kakaoOAuthService.exchangeCodeForAccessToekn(code));
// 카카오 로그인 성공, 실패 response
return kakaoOAuthService.kakaoLogin(kakaoAccessToken);
}
} 이코드 가 맞을까요?
백앤드 코드 구현하신 분이 따로 있을까요?
그렇다면 구현하신 분이 문의 하시는게 좋을것 같습니다.
위에 제공하신 코드에 접근토큰 발급 코드가 확인되지 않습니다.
이 부분 추가 제공 부탁드립니다.