passport-naver 정보 제공(profile) 오류 해결

서해빈·2021년 4월 14일
1

Trouble

목록 보기
4/15
post-custom-banner

passport-naver를 사용해 소셜 로그인 기능을 추가하는 과정에서 사용자의 이름을 받아오지 못하는 문제가 발생했다.

1차 문제 - profile.displayName mapping

네아로 제공 정보 선택

passport-naver strategy의 콜백함수에서 인자로 주어지는 profile.displayName에 이름이 저장될 것이라 생각했는데, 실제로는 nickname을 매핑하고 있기 때문에 이름을 받아와도 별명 값은 없기 때문에 undefined가 찍힌 것이다.

2차 문제 - 네아로 인증서

그런데 이 후에 제공 정보 선택에서 별명을 추가해도 계속 undefined가 찍히는 문제가 발생했다. 서버를 재시작하고 제공 정보 선택 항목을 바꿔가며 해도 해결되지 않아서 멘붕하던 찰나에.. 제공 정보 항목이 바뀌면 동의창에서 다시 동의를 해줘야 된다는 글을 찾았다.

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

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

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

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

이전에 별명 없이 이름만 받아오던 제공 정보에 대한 동의가 계정에 남아있어서 갱신된 제공 정보 선택이 적용되지 않았던 것이었다. 계정의 네이버와 연결된 서비스 관리 창에서 해당 정보 제공을 철회하고 나니, 갱신된 제공 정보 동의창이 정상적으로 뜨는 것을 확인할 수 있었다. 그 결과 profile.displayName에 별명 값이 잘 저장되는 것도 확인했다.

참고 및 출처

post-custom-banner

0개의 댓글