-
[TIL] 2차 프로젝트 기억하고 싶은 코드 1. Naver 소셜로그인Develope/React 2020. 7. 28. 17:30
vibe logo ◎ 뒤늦게 2차 프로젝트를 진행할 때 기억하고 싶은 코드에 대해 블로깅한다.
2차 프로젝트 때 나를 가장 괴롭혔던 naver 소셜 로그인...
유일하게 우리 프로젝트만 naver 소셜 로그인을 사용하였다.
다른 조와 정보도 공유할 수 도 없고 혼자 해야만 했다..
고생한 만큼 기억하고 싶은 코드이다.
1. 네이버 애플리케이션 등록
◎ 사용 목적에 맞게 설정을 해준다.
- API에 필요한 정보들을 체크해준다.
- API를 사용할 url을 적어주고, 네이버 아이디로 로그인 시 Callback URL도 적어준다.
2. 네이버 애플리케이션 목록 확인
◎ Application에서 자기가 만든 애플리케이션의 목록들을 확인할 수 있다.(test를 많이 해서 애플리케이션이 많다..)
3. public 폴더 안에 있는 index.html에 script를 추가해준다.
4. code
function SideNav () { const { naver } = window; const Login = () => { Naver(); UserProfile(); } useEffect(Login, []); const Naver = () => { const naverLogin = new naver.LoginWithNaverId({ clientId: 발급받은 clientId, callbackUrl: "http://localhost:3000/", isPopup: false, loginButton: {color: "green", type: 1, height: 30} , callbackHandle: true }); naverLogin.init(); } const UserProfile = () => { window.location.href.includes('access_token') && GetUser(); function GetUser() { const location = window.location.href.split('=')[1]; const token = location.split('&')[0]; console.log("token: ", token); fetch(`${API}/account/sign-in` , { method: "GET", headers : { "Content-type" : "application/json", "Authorization": token }, }) .then(res => res.json()) .then(res => { localStorage.setItem("access_token", res.token); setUserData({ nickname : res.nickname, image : res.image }) }) .catch(err => console.log("err : ", err)); } }; return ( <SideLogin className="login"> <UserInfo> <SideText>로그인</SideText> </UserInfo> <LoginLink onClick={Login} id="naverIdLogin" /> </SideLogin> ) };
- window에 있는 naver 비구조화 할당하여 선언한다.
- Login 버튼을 클릭할 때, naver 로그인 경우, id를 지정해주고 접근하여야 한다.
- Login 함수에 접근하여 Naver( ) 함수를 실행하고 난 뒤, UserProfile( ) 함수를 실행한다.
- Naver 함수에 접근하여 new Naver.LoginWithNaverId({ }) 안에 네이버 개발자 도구 가이드에 있는 필요한 값들을 지정해준다.
- UserProfile( ) 함수가 실행되면 token을 설정한다. naver 같은 경우, access_token을 url로 넘겨준다.
그렇기 때문에 split( ) 함수를 사용하여 token 값을 추출해야 한다.
- 받아온 response를 확인하고 필요한 정보를 setState 해서 담아준다.
5. 문제
◎ 로그인 버튼을 누르고 로그인은 되는데, 이상하게 callbackUrl로 지정한 주소로 안 가고 다른 액션을 취해야 가는 현상이 생긴다.
이 문제에 대해서는 아직도 해결하고 있다.
6. 느낀 점
◎ 내가 잘못 접근했는지 몰라도 네이버 소셜 로그인은 힘들었다.
네이버 개발자 가이드를 봐도 해결 안 되는 부분도 있고 구글링을 해봐도 한계가 있었다.
그래도 구글링 해본 결과 밑에 참조된 블로그에서 많은 도움을 받았다.
소셜 로그인 기능은 필수로 해야 할 기능이며, 더 많이 접해봐야 할 거 같다.
※ 참조
https://developers.naver.com/main/
NAVER Developers
네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음��
developers.naver.com
TIL - 네이버 로그인 API in React + TypeScript
clientId: 자리에 본인 api 신청시 받은 id를 입력해줘야 한다.callbackUrl: 콜백 url에 등록해 놓은 url 입력. 안해주면 안됨...callbackHandlke: true로 설정해 놓으면 해당 페이지는 callback페이지로의 동작을 ��
velog.io
'Develope > React' 카테고리의 다른 글
[TIL] Back-end와 통신 시 발생하는 에러(Unexpected end of JSON input) (0) 2020.07.19 [TIL] Redux 예제 1. 카운터 구현하기 (0) 2020.06.30 [TIL] Redux 란? (0) 2020.06.29 [TIL] 1차 프로젝트 기억하고 싶은 코드 2. Daum 우편번호 구현하기 (0) 2020.06.22 [TIL] 1차 프로젝트 기억하고 싶은 코드 1. Tab 버튼 구현하기 (2) 2020.06.09