공식 문서를 참고하여 만들어진 글입니다.
request-promise 모듈을 사용해서 짰지만, axios로 대체하는 방법을 더 추천 하는 글도 봤었다. 각자 잘 찾아본 후 자신에게 맞는 모듈을 사용하면 될 것 같다.request 대신 request-promise를 사용한 이유는 비동기 통신을 하기 위해!네이버로 로그인 링크 클릭 시 로그인 화면으로 연결이건 어디까지나 내가 선택한 방법이고, 더 좋은 방법은 얼마든지 있을 것이다.
네이버 로그인 클릭 시 로그인 화면으로 연결const naver_api_url = `https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=${Naver.client_id}&redirect_uri=${Naver.redirectURI}&state=${Naver.state}`;
다음과 같이 네이버 로그인 클릭 링크를 구성했다.
https://nid.naver.com/oauth2.0/authorize 링크를 base url로 잡는다.response_type=code&client_id=${Naver.client_id}&redirect_uri=${Naver.redirectURI}&state=${Naver.state}로 적절한 query string 값을 보내준다.네이버 로그인 Callack URL에서 등록할 수 있다.app.get('/naver/callback', async (req, res) => {
	// code
});
const request = require('request-promise');
app.get('/naver/callback', async (req, res) => {
  	// 토큰을 발급받으려면 query string으로 넘겨야 할 정보들이다.
    const code = req.query.code;
    const state = req.query.state;
  	// 로그인 API를 사용해 access token을 발급받는다.
    const naver_api_url = `https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&response_type=code&client_id=${Naver.client_id}&client_secret=${Naver.client_secret}&redirect_uri=${Naver.redirectURI}&code=${code}&state=${state}`;
    const options = {
        url: naver_api_url,
        headers: {
          'X-Naver-Client-Id': Naver.client_id, 
          'X-Naver-Client-Secret': Naver.client_secret
        }
    }
    const result = await request.get(options);
  	// string 형태로 값이 담기니 JSON 형식으로 parse를 해줘야 한다.
    const token = JSON.parse(result).access_token;
  
    // 발급 받은 access token을 사용해 회원 정보 조회 API를 사용한다.
    const info_options = {
        url: 'https://openapi.naver.com/v1/nid/me',
        headers: {'Authorization': 'Bearer ' + token}
    };
    const info_result = await request.get(info_options);
  	// string 형태로 값이 담기니 JSON 형식으로 parse를 해줘야 한다.
    const info_result_json = JSON.parse(info_result).response;
  
  	// 이후 얻게 된 정보들로 원하는 코드를 작성하면 된다.
  	// Ex) 회원 가입 시키기, 내 app용 jwt 발급하기
})
네이버 로그인 API를 사용한 회원 정보 조회 완성이다!
이후 어떤 코드를 작성해 정보를 어떻게 활용할지는 사용자의 몫이다.
나는 얻은 정보에서 고유 ID를 통해 첫 로그인 시에는 회원 가입을 시키고, 이후 로그인 시에는 고유 ID를 담은 JWT를 발급하도록 코드를 작성하였다.