이메일 인증을 구현하며 다양한 생각

CHOI YUN HO·2022년 9월 8일
0

소프트웨어 마에스트로에서 "온라인 강의 큐레이션 서비스 - curady"를 개발하며 생긴 일

이메일 인증


이메일로 회원가입을 할 때, 이메일 인증을 구현하려 한다.

크게 두 가지 방법이 떠올랐다.

  1. 인증 코드를 유저의 이메일로 보내고,
    유저가 클라이언트에 해당 코드를 입력하면
    서버에서 인증 코드 확인과 함께 인증 여부를 반환하여 다음 프로세스를 진행하도록 한다.
  1. 인증 링크를 유저의 이메일로 보낸다.
    유저가 인증 링크를 클릭하면, 서버에서 인증 확인을 한다.

뭐가 좋을까?

처음에는 당연하게 두번째 방식이 좋다고 생각했다.
왜냐하면 유저 입장에서 인증 코드를 입력하는 절차가 하나 줄어드니까..

그래서

유저가 회원가입 시 기본 정보인 이메일과 비밀번호를 입력하면
우선 유저를 만들고 is_Email_Auth=False,
그리고 email_auth 테이블을 만들어서 uuid값의 auth_token을 함께 생성한다.
이 때 현재시간 + n 으로 만료시각을 저장한다.(나는 5분으로 설정했다.)

Controller에 auth_token을 받아 이메일 인증을 진행하는 api를 만들고,
유저가 이메일을 열어서 링크를 클릭하면 이 api를 호출하도록 url을 담아서 이메일을 보낸다.

그런데 여기서 문제

유저가 인증 링크를 클릭하면 서버에서 인증을 하는 것 까지는 ok..
근데 response로 뭘 주지?
유저는 이 다음에 어떻게 행동해야하지??

다음 페이지로 리다이렉션?

유저가 인증 링크를 클릭하고 인증이 성공적으로 진행되면,
다음 회원가입 페이지로 리다이렉션 시킬까?

하지만 PC로 회원가입을 진행하다가, 핸드폰으로 이메일을 확인하는 상황이나
혹은 반대 상황..생각보다 빈번히 일어날 수 있는 것 같다.

이럴 때 리다이렉션을 시키는게 맞을까?

클라이언트가 요청을 안해도 서버에서 먼저 알림을 줄 수 있을까?

유저 입장에서 가장 간편한 것은 (처음 생각했던 두 번째 방식의 이메일 인증이 되려면)

  1. 클라이언트에서 회원가입을 진행하다가 이메일 인증을 누르고,

  2. (새 창을 켜든, 새 브라우저를 켜든, 모바일로 확인하든) 본인의 이메일로 접속하여 인증 링크를 클릭한다.

  3. 인증이 완료되고 1에서 알아서 다음 페이지로 넘어간다.

이렇게 진행되어야 한다.

그게 가능하려면 클라이언트가 계속해서 해당 유저가 이메일 인증을 완료했는지 확인하거나,
이메일 인증이 완료됐으면 서버에서 먼저 알림을 줘야한다.

서버 푸시

이를 통해 서버 푸시에 대해 찾아보게 되었다.

이 다음 내용은 길어질 것 같아 따로 포스팅해야겠다.

이 글에서는 이메일을 통해 회원 인증 절차를 구현할 때 생각해볼만한 것들 정도로 보면 되겠다.

profile
가재같은 사람

0개의 댓글