npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

passport-naver-v2

v2.0.8

Published

naver oauth2 passport login

Downloads

1,884

Readme

passport-naver-v2

passport oauth2 에 naver 로그인 연동

네이버에서 구현한 passport-naver 가 있지만, 5~6년 전에 개발 이후로 더 이상 진전이 없고, 프로필 데이터도 한정적으로 제공하고 있어서 개발한 모듈

passport-facebook 과 passport-kakao 를 참고하여 개발

설치하기

npm install passport-naver-v2

사용하기

  • https://developers.naver.com/apps/#/register?api=nvlogin 에서 애플리케이션을 등록한다.
  • 네아로 검수 요청을 하기 전 이라면, 멤버관리에 테스터 아이디를 등록해준다.
  • 네아로 애플리케이션을 생성하고 받은 Client IDClient Secret 을 개발 환경에 .env 를 생성하고 CLIENT_ID CLIENT_SECRET 을 입력해준다.

passport 에 적용하는 코드는 다음과 같다.

import passport from 'passport'
import { Strategy as NaverStrategy, Profile as NaverProfile } from 'passport-naver-v2'

passport.use(
  new NaverStrategy(
    {
      clientID: process.env.CLIENT_ID,
      clientSecret: process.env.CLIENT_SECRET,
      callbackURL: `/auth/callback`, // 애플리케이션을 등록할 때 입력했던 callbackURL 을 입력해준다.
    },
    (accessToken: string, refreshToken: string, profile: NaverProfile, done: any) => {
      // 이곳에서 사용자 계정 관련된 작업을 한다.

      done(null, profile)
    }
  )
)

프로필 모델 구조

| key | value | optional | description | | ------------ | ------ | -------- | ------------------------------------- | | provider | String | X | naver 고정값 | | id | String | X | 사용자의 naver id | | nickname | String | O | 사용자의 닉네임 | | profileImage | String | O | 사용자의 프로필 이미지 | | age | String | O | 사용자의 나이 (ex, '28-29') | | gender | String | O | 사용자의 성별 (ex, 'F' 또는 'M') | | email | String | O | 사용자의 이메일 | | mobile | String | O | 사용자의 전화번호 | | mobileE164 | String | O | 사용자의 전화번호 (국가번호 포함) | | name | String | O | 사용자의 이름 | | birthday | String | O | 사용자의 생년월일 | | birthYear | String | O | 사용자의 생년 | | _raw | String | O | 프로필 조회로 얻어진 json string | | _json | Object | O | 프로필 조회로 얻어진 json 원본 데이터 |

샘플코드 실행하기

  1. sample 폴더로 이동한다
  2. npm install 로 패키지를 설치한다.
  3. .env 파일을 생성하고 네아로 애플리케이션을 생성할때 받은 Client IDClient SecretAPI_KEYCLIENT_SECRET_KEY 에 각각 입력해준다.
  4. npm start 로 서버를 실행한다.
  5. 브라우저를 열고 http://locahost:3000/login 을 접속한다.

예외사항

네이버는 필수정보 항목에 체크를 하지 않아도 로그인이 된다. 필수 항목 또한 사용자가 선택할 수 있다는데, 그럼 선택이랑 다를게 없어 보이는데 왜 그랬는지 알 수 없다. 참고

이 부분은 서비스를 개발할 때 문제가 된다. 네아로에서 받은 이메일을 통해 서비스에 회원가입을 하는 로직이 있다면 서비스 서버에서는 오류를 내뱉을 것이다.

필수임에도 동의 체크를 하지 않고 들어온 고객에 한하여 다시 동의창을 보여주는게 이상적으로 보인다.

이미 동의를 한 사용자에게 동의창을 다시 띄우기 위해서는 사용자가 네이버 계정에 들어가서 서비스 연결을 끊어야 한다.

하지만 아래와 같은 옵션을 이용하면, 사용자가 서비스 이용을 끊지 않고도 다시 동의창을 호출 할 수 있다.

app.get('/login', passport.authenticate('naver', { authType: 'reprompt' }))

reprompt 말고도 reauthenticate 옵션도 있다. reauthenticate 는 동의창이 아닌 아이디 / 패스워드 입력부터 시작한다.