본문 바로가기

Web

django 1.5에서 메일로 가입 activation 처리하기.


웹 사이트에 가입시 사용자 등록을 하는 것 만으로 가입을 바로 하는것이 아니라, 가입시에 등록한 이메일로 activation을 최종 체크해야 등록하게 하는 방법을 설명하려고 한다. 이런 방법을 사용하는 이유는 실제 사용 가입자임을 가려내기 위한것이고, email주소를 id로 사용하는 것과 유사한 효과를 낸다. email을 id로 사용하면 그 자체가 고유 id로 작용하는 장점이 있지만, 어짜피 email로 activation 확인을 받아서 최종적으로 실제 사용할 사람인지를 구분한다는 점에서.. 굳이 id로 email주소를 사용하는 것보다 개별적인 id 이름을 허용하되 email activation으로 체크하면 될 것라 생각한다. 물론, email 주소를 고유 id로 사용하면 a@test.com과 a@example.com이 다른 아이디로 받아들여진다는 장점은 있겠지...



본 포스팅은 위 원문(django 1.3에서 테스트되었음) 기반으로 django 1.5버젼, ubuntu 12.10 에서 테스트 하였다.



설정하기


(1) 아래 사이트에 접속하여 파일을 다운로드 받는다.

* 다운로드 받기 : https://bitbucket.org/ubernostrum/django-registration/overview




혹시 파일링크를 클릭했는데, Access Denied라고 뜬다고 실망하지말고, 메뉴에서 Overview를 클릭해서 보면 우측하단에 download 링크가 있다. 그것을 다운로드 받으면 된다. 분명 Access Level이 public으로 되어있다. 고맙게도 최근까지 업데이트가 되었다. 그리고, 좌측 설명을 보니 django 1.4버젼 이상 설치가 필요하단다. 원문 포스팅은 1.3까지 테스트되었다고 하는데, 그 사이에 1.4버젼 이상에서도 테스트가 되었나보다.



다운로드를 했으면 압축을 현재 만들어진 project의 하위 위치에 푼다. 


(2) 진행하고 있는 프로젝트의 settings.py 파일에 아래 내용을 추가한다.


INSTALLED_APPS = (

    'django.contrib.auth',

    'django.contrib.humanize',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.sites',

    'django.contrib.admin',

    # etc..

    'registration',

    'django.contrib.humanize',

) 


 ACCOUNT_ACTIVATION_DAYS=7

EMAIL_HOST='localhost'

EMAIL_PORT=1023

EMAIL_HOST_USER='username'

EMAIL_HOST_PASSWORD='password'


위 5개의 설정은 activation을 보내기 위한 메일 서버와 activation까지 얼마만큼 기다려 줄것인가를 설정하는 것이다. 따라서, 서비스를 하기위해서는 SMTP를 지원하는 메일 서버가 필요하다. 그런데, 개발중에 그런 환경이 되지 않는다면  개발중에는 아래와 같이 사용하는 방법도 있다고 한다.


설정을 아래와 같이 바꿔주고.(개발중에만..)

 EMAIL_HOST = 'localhost'

EMAIL_PORT = 1025

EMAIL_HOST_USER = ""

EMAIL_HOST_PASSWORD = ""

EMAIL_USE_TLS = False

DEFAULT_FROM_EMAIL = 'testing@example.com'


다른 콘솔을 하나 더 열고, 아래처럼 입력


 python -m smtpd -n -c DebuggingServer localhost:1025



(3) 콘솔에서 다음을 입력해서 데이터베이스를 생성한다.


 python manage.py syncdb


(4) 프로젝트의 urls.py에 아래를 추가한다.


 (r'^accounts/', include('registration.urls')),


원문에는 추가하는것이 하나 더 있는데, 본인은 admin을 따로 사용하지 않기때문에 넣지 않았다. 필요하면 추가해서 넣으면 된다.


(5) 템플릿 추가


따로 만들어도 되지만, 일단 되는지 보기위해서 샘플로 아래 사이트에서 템플릿 파일을 다운로드 받는다.


* 템플릿 샘플 : https://www.box.com/s/68191c48af306e450c29


이제 최종적으로 템플릿 html을 프로젝트에 추가해줘야 하는데, 프로젝트에서 설정한 템플릿 디렉토리의 하단에 압축을 풀어서 넣어주면 된다.

예를들어, setting.py에 template 위치를 다음과 같이 정했다면,


 TEMPLATE_DIRS = (

    os.path.join(os.path.dirname(__file__), "template"),

)


설치 위치는 template/registration 이 될 것이다.


(6) 설정 끝. 테스트


서버를 실행하고, http://localhost:8000/accounts/register 에 접속하면..


 python manage.py runserver


보기가 이쁘지는 않지만 아래처럼 뜬다.




입력을 하고, Register 버튼을 누르면.. 화면이 아래처럼 바뀌고,





이전에 다른 콘솔에 실행을 해놨던 디버깅용 메일서버(?)에 아래처럼 표시된다.




하단에 뜨는 링크 주소를 복사해서 브라우저에 띄우면, activation이 완료되었다고 뜨고, 정상적으로 사용자 등록이 완료되었다고 뜬다.