두피만
FE 던지기
두피만
전체 방문자
오늘
어제
  • 분류 전체보기
    • 기술 경험
    • 기술에 대한 생각들
    • 회고록
    • 프로그라피
    • 구 게시글
      • 백엔드 찍먹
      • 삽질
      • React
      • 라이브러리 소개
      • Breaking 프로젝트

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Redux
  • 프로그라피 React
  • 프로그라피 8기
  • react
  • SVG
  • 상태관리
  • 아이디어 도출
  • 전역상태
  • react-query
  • 셀프다이닝
  • Modal
  • 프론트엔드
  • JS로 React 구현하기
  • typescript
  • 리엑트 노드버드
  • 노드버드
  • 서비스 발전 과정
  • 삽질
  • query string
  • 프로그라피

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
두피만

FE 던지기

구 게시글/Breaking 프로젝트

QueryString(부제: 카카오 로그인)

2022. 11. 9. 23:31

카카오 로그인 오류

js sdk를 이용하여 카카오 로그인을 구현하던 중에 발생하였다.

프론트단에서 카카오로그인으로 인가 코드를 받고 토큰을 받아 와야 로그인이 완료가 되는데 토큰을 못받아 왔다

인가코드는 js sdk를 사용해서 구현을 할 수 있었지만 토큰은 rest API post method를 이용해서 받아와야 했다

export const postAccessCode = (data) => {
  const headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
  };
  return axios({
    method: 'post',
    url: KAKAO_PATH.OAUTH_TOKEN,
    headers: headers,
    data: data,
  });
};

필수설정을 모두 마치고 보내보니 KOE010(Bad Client credentials) 에러가 발생하였다

[KOE010 (Bad client credentials) 에러가 발생할 때]

 

KOE010 (Bad client credentials) 에러가 발생할 때

{“error”:“invalid_client”¸ “error_description”:'Bad client credentials'¸ “error_code”:'KOE010'} KOE010 (Bad client credentials) 에러가 발생할 때 ◾️ 대부분 client_secret이 활성화된 상태에서 client_secret을 파라메

devtalk.kakao.com

우리는 client_secret을 활성화 시키지 않았고 header 설정도 했을 뿐만아니라 post 방식으로 요청하였다.

[React 카카오로그인 invalid_client 오류 코드 KOE010]

 

React 카카오로그인 invalid_client 오류 코드 KOE010

React로 카카오 로그인을 구현하려 합니다. Kakao.Auth.authrize를 사용해서 rediretUri/?code=xxxxxxx 인가 코드를 받아오고 fetch("https://kauth.kakao.com/oauth/token", { method: "POST", headers: { 'Content-type': 'application/json'

devtalk.kakao.com

그러던 중 게시글 하나를 발견하였는데 body에 들어갈 데이터를 json 형식이 아닌 QueryString으로 주어야 한다는 것이다

 

QueryString

QueryString은 데이터를 url주소에 서버와 합의된 데이터 형식을 전달하는것이다

https://www.youtube.com/watch?v=qMwzWk81tVM

`?v=qMwzWk81tVM` 이부분이 QueryString 인 것이다 v 라는 key값과 qMwzWk81tVM 라는 value로 구성이되어 있는것이다.

 

보내야하는 파라미터가 여러개일경우 & 연사자를 이용해서 더 붙일수 있다 순서는 상관하지 않는다.

https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EA%B2%80%EC%83%89
https://search.naver.com/search.naver?where=nexearch&query=%EA%B2%80%EC%83%89&sm=top_hty&fbm=0&ie=utf8

순서를 바꾸어도 결과는 같다

프론트에서는 어디에서 사용이 될까?

페이지 내에 state나 변수로 저장하면 새로고침 시에 데이터를 유지하고 싶을때 사용한다. 위의 내용은 네이버 검색창에 검색을 한 모습이다.

만약 url이 QueryString사용없이 `https://search.naver.com/search.naver` 이었다면 내 검색어는 변수를 통해서 관리 되고 있다는거고 이는 새로고침시에 모든 변수가 날아가고 내 검색어 또한 사라져 데이터를 가져오지 못하게 되는것이다

새로고침을 했는데 검색결과 창이 사라지면 정말 정말 UX적으로 안좋을 것이다.

 

QueryString으로 변환하기

다시 카카오 로그인으로 넘어와 보겠다 Json코드를 QueryString화 시켜야 한다.

const queryStringBody = Object.keys(data)
    .map((k) => encodeURIComponent(k) + '=' + encodeURIComponent(data[k]))
    .join('&');

다음과 같이 json을 queryString화 할수있다.

const headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
  };
  const queryStringBody = Object.keys(data.data)
    .map((k) => encodeURIComponent(k) + '=' + encodeURIComponent(data.data[k]))
    .join('&');
  return axios({
    method: 'post',
    url: data.url,
    headers: headers,
    data: queryStringBody,
  });

다음과 같은 API를 만들어 성공적으로 카카오 로그인을 할수 있었다.

'구 게시글 > Breaking 프로젝트' 카테고리의 다른 글

피그마 SVG 파일 추출시 컴포넌트상에서 다른 이미지 생성  (0) 2022.11.10
소셜 로그인(카카오, 구글)  (0) 2022.11.09
프론트엔드의 JWT  (0) 2022.11.09
    '구 게시글/Breaking 프로젝트' 카테고리의 다른 글
    • 피그마 SVG 파일 추출시 컴포넌트상에서 다른 이미지 생성
    • 소셜 로그인(카카오, 구글)
    • 프론트엔드의 JWT
    두피만
    두피만

    티스토리툴바