2012-03-19 2 views
2

현재 django-registration을 사용하고 있으며 잘 작동합니다 (일부 트릭 사용). 사용자가 등록하면 그는 자신의 메일을 확인하고 활성화 링크를 클릭해야합니다. 괜찮아요,하지만 ...장고에서 이메일을 변경할 때 확인 이메일을 보내십시오.

사용자가 이메일을 변경하면 어떻게 될까요? 나는 그가 이메일 주소의 소유자임을 확인하기 위해 그/그녀에게 이메일을 보내고 싶습니다. ...

이 글을 쓰는 시간을 절약 할 수있는 응용 프로그램, 스 니펫 또는 무언가가 있습니까? 나?

+0

시험해보십시오. http://stackoverflow.com/questions/2296846/django-apps-for-changing-user-email-with-verification – CppLearner

+1

그 중 어느 것도 작동하지 않는다면, 함께 작업 할 두 개의 앱을 조정하는 데 소비하는 시간이 해시 인증 코드에서 읽는 작은보기를 작성하고 사용자 모델 클래스에 "확인 중"이라는 상태 필드를 추가합니다. 확인이 끝날 때까지 사용자는 잠겨 있습니다. – CppLearner

답변

4

저는 최근에 같은 문제에 직면했습니다. 그리고 나는 그저 다른 플러그인/플러그인을 가지고 있다는 생각을 좋아하지 않았다.

signals.py :

from django.contrib.sites.models import Site, RequestSite from django.contrib.auth.models import User from django.db.models.signals import post_save, pre_save from django.dispatch import receiver from registration.models import RegistrationProfile # Check if email change @receiver(pre_save,sender=User) def pre_check_email(sender, instance, **kw): if instance.id: _old_email = instance._old_email = sender.objects.get(id=instance.id).email if _old_email != instance.email: instance.is_active = False @receiver(post_save,sender=User) def post_check_email(sender, instance, created, **kw): if not created: _old_email = getattr(instance, '_old_email', None) if instance.email != _old_email: # remove registration profile try: old_profile = RegistrationProfile.objects.get(user=instance) old_profile.delete() except: pass # create registration profile new_profile = RegistrationProfile.objects.create_profile(instance) # send activation email if Site._meta.installed: site = Site.objects.get_current() else: site = RequestSite(request) new_profile.send_activation_email(site) 

는 그래서 User의 이메일 때마다

당신은 User에 모델의 싱글 (pre_save, post_save) 및 RegistrationProfile 사용을 듣고, 그렇게함으로써 달성 할 수있다 변경되면 사용자가 비활성화되고 활성화 이메일이 사용자에게 전송됩니다.

+0

'post_save'에 대해 요청이나 일부를 전달하지 않아도됩니까? – fpghost

+0

하나의 결함은 사용자가 실수로 잘못된 주소로 이메일 주소를 업데이트 한 다음 이메일을받지 못하면 잠긴 상태로 남을 수 있다는 사실입니다. – fpghost

+0

사용자 계정을 비활성 상태로 만드는 아이디어가 마음에 들지 않습니다. –