본문 바로가기

Dev-/Spring

Spring 회원가입 인증메일 구현하기

꽤 많은 사이트에서,

회원가입 후 입력한 메일을 통한 인증과정을 거치는 것을 볼 수 있습니다.


개인 프로젝트에 적용해볼까 싶어 찾아봤는데, 다행히 생각보다는 어렵지 않아 적용시켜보았습니다.




시작 전에,, 관련 라이브러리 2개를 다운받아야 합니다.


[pom.xml]


상단의 레파지토리는 스프링 버전과 맞춰주시고,, 

확실한 것은 아닌데,, 하단의 javax.mail 이게 비슷한게 여러개 있는 듯 합니다.


초반에 다른 것을 적용하였는데 계속 오류가 났는데,, 스택 오버플로우를 보고, 저걸로 바꾸어 해결했네요. 참고만..



그리고.. 스프링 설정 xml파일에 아래 빈을 추가시켜줍니다.

(저는 root-context.xml에 추가시켰습니다.)

실제로 메일을 보내는데 필요한 기본 정보를 입력하시면 됩니다.


[root-context.xml]






===============================================================================


우선 큰 흐름은 이렇습니다.


1. 회원 관련 테이블에 권한 키(authkey), 권한 상태(authstatus) 필드가 필요

2. 회원가입시 임의의 권한 키(authkey)를 생성, db에 반영(권한 상태(authstatus)는 0과 같은 디폴트 값

3. 사용자가 입력한 이메일로 관리자 발신의 인증메일 전송(db에 반영한 authkey 정보 포함)

4. 인증링크 클릭시, 파라미터로 받은 authkey를 확인하여 권한 상태(authstatus) 업데이트

5. 완료



생각보다 간단합니다.

아래는 코드



[UserController.java - joinPost]


회원가입 처리는 단순합니다. 그러면 create가 어떻게 되어있는 봅시다.


[UserServiceImpl.java - create]



TempKey라는 클래스를 사용해 임의의 authkey를 만들어주고, 

MailUtils라는 클래스를 만들어 메일을 디자인하고, 보내줍니다. 

여기서 위에서 만든 authkey를 인증 링크의 파라미터로 담아줍니다. 사용자가 인증 메일을 확인했을 때 누르는 링크입니다.

(아이디는 생략하셔도 됩니다. 개인적으로 필요해서 넣어주었습니다.)



위에서 사용한 TempKey, MailUtils를 봐야겠죠.

눈으로 보시고, 그냥 사용하시면 될 듯 합니다.

키를 만드는 다른 로직이 필요하시면 적절히 적용하시면 될 것 같습니다.


[TempKey.java]



[MailUtils.java]


[UserServiceImpl.java - create]에서 인증 링크의 요청을 잘 보시면, "http://localhost:8080/user/joinConfirm?~~~"로 요청을 하죠?



이제 이 요청을 처리해줍니다.


[UserController.java - joinConfirm]


위에서 주석처리된 부분을 보시면,,

[UserController.java - updateAuthstatus]로 이메일 인증이 된 사용자의 권한(authstatus)을 업데이트 시켜 줍니다.





이제 필요에 따라 authstatus가 1로 업데이트 된 사용자의 권한을 주시면 됩니다.