네이버 로그인 검수에서 떨어지고 메일 확인을 만들었다
네이버 로그인 검수에서 반려됐다
웹으로 방향을 바꾸면서 로그인은 네이버 아이디로 로그인을 골랐습니다. 국내 사용자 대부분은 네이버 계정이 있고, 한 사람이 만들 수 있는 아이디가 세 개로 제한돼 있어서 탈퇴 후 바로 재가입하는 걸 어느 정도 막을 수 있다고 봤습니다.
개발을 마치고 검수를 요청했는데 반려됐습니다. 사유는 두 가지였습니다. 서비스 소개 자료가 부족하다는 것, 그리고 19세 이상만 쓰는 서비스라면 PASS 같은 본인인증으로 연령을 확인해야 한다는 것. 첫 번째는 자료를 보완하면 되지만 두 번째는 지금 할 수 없었습니다. 본인인증은 사업자등록을 마쳐야 계약할 수 있으니까요.
네이버 로그인이 실제로 해 주던 일
여기서 한 번 따져 봤습니다. 네이버 로그인으로 연령을 확인하고 있었나? 아니었습니다. 정보 제공 항목을 최소로 받았기 때문에 서버가 받는 건 서비스 전용 고유 번호 하나뿐이었습니다. 결국 네이버 로그인이 해 주던 일은 "이 사람은 네이버 계정을 갖고 있다"는 확인 하나였습니다.
그렇다면 같은 효과를 다른 방법으로 낼 수 있습니다. 로그인은 Google로 하고 가입 첫 화면에서 네이버 메일 주소로 확인 번호를 보내면 됩니다. 번호를 받아 입력할 수 있다면 그 메일함의 주인이라는 뜻입니다. 이름은 '본인인증'과 헷갈리지 않게 '메일 확인'으로 정했습니다.
메일 주소는 저장하지 않는다
메일 주소를 받으면 저장하고 싶은 유혹이 생깁니다. 하지만 글연이 메일 주소로 하려는 일은 딱 두 가지입니다. 같은 메일로 계정을 두 개 만들지 못하게 하는 것, 그리고 탈퇴하거나 차단된 사람이 같은 메일로 다시 들어오지 못하게 하는 것. 둘 다 원래 주소가 아니라 같은 주소인지만 알면 됩니다.
주소는 번호를 보낼 때만 쓰고 저장할 때는 되돌릴 수 없는 해시로 바꿉니다. 확인 번호도 원문 대신 해시로 두고 5분이 지나면 버립니다. 여기에 하나를 더 신경 썼습니다. "이미 가입된 메일이에요"라고 알려 주면 남의 메일을 넣어서 그 사람이 글연을 쓰는지 알아낼 수 있습니다. 그래서 이미 쓰는 메일, 차단된 메일, 재가입 대기 중인 메일을 모두 같은 문구로 막습니다.
Gmail로 메일을 보내면 보낸편지함에 사본이 남는다는 것도 나중에 알았습니다. 주소를 저장하지 않는다고 해 놓고 보낸편지함에 쌓아 두면 말이 안 됩니다. 그래서 한 시간마다 도는 작업을 붙였습니다. 보낸편지함에서 확인 메일만 찾아 휴지통으로 옮기고 휴지통에서도 지웁니다.
Google 로그인은 인스타그램 안에서 안 열린다
Google로 바꾸고 나서 새 문제가 보였습니다. Google은 앱 안 브라우저에서 로그인을 막습니다. 인스타그램이나 카카오톡에서 링크를 눌러 들어온 사람은 로그인 버튼을 눌러도 오류 화면을 보게 됩니다. 홍보 채널이 바로 인스타그램인데 말이죠.
그래서 로그인 화면에서 브라우저를 먼저 확인합니다. 앱 안 브라우저라면 버튼 위에 "인스타그램 같은 앱 안에서는 Google 로그인을 쓸 수 없어요"라고 먼저 알리고, 카카오톡이면 바깥 브라우저로 여는 버튼을, 그 밖의 앱이면 주소 복사 버튼과 '브라우저에서 열기' 안내를 보여 줍니다. 버튼을 누르고 나서 오류를 보는 것보다 누르기 전에 아는 편이 덜 당황스럽습니다.
바꾸면서 남긴 것
로그인 방식을 바꾸는 건 생각보다 큰 수술이었습니다. 로그인 키, 재가입 대기, 블랙리스트가 모두 네이버 고유 번호에 묶여 있었기 때문입니다. DB 구조를 바꾸는 스크립트는 네이버로만 가입한 회원이 남아 있으면 아무것도 바꾸지 않고 멈추게 만들었습니다. 반쯤 바뀐 DB가 제일 위험합니다.
네이버 로그인 코드는 소스에서 모두 뺐고, 무엇을 만들었고 왜 내렸는지, 다시 살리려면 어디서 가져오면 되는지만 문서 하나로 남겼습니다. 본인인증을 붙일 수 있게 되면 그때 다시 볼 생각입니다.