我目前使用django-registration
,它運行良好(有一些技巧)。當用戶註冊時,他必須檢查他/她的郵件並點擊激活鏈接。這很好,但...更改Django中的電子郵件時發送確認電子郵件
如果用戶更改電子郵件會怎麼樣?我想給他/她發一封電子郵件,以確認他是電子郵件地址的所有者...
是否有一個應用程序,代碼段或什麼的這將節省我寫它的時間我自己?
我目前使用django-registration
,它運行良好(有一些技巧)。當用戶註冊時,他必須檢查他/她的郵件並點擊激活鏈接。這很好,但...更改Django中的電子郵件時發送確認電子郵件
如果用戶更改電子郵件會怎麼樣?我想給他/她發一封電子郵件,以確認他是電子郵件地址的所有者...
是否有一個應用程序,代碼段或什麼的這將節省我寫它的時間我自己?
我最近面臨同樣的問題。而且我不喜歡爲此提供另一個應用/插件的想法。
您可以做到這一點,聽User
模型單打(pre_save
,post_save
),並使用RegistrationProfile
:
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
的電子郵件是更改後,用戶將被停用,激活電子郵件將發送給用戶。
試試這些? http://stackoverflow.com/questions/2296846/django-apps-for-changing-user-email-with-verification – CppLearner 2012-03-20 00:05:32
如果沒有這項工作,我的意思是調整兩個應用程序一起工作的時間可能花在編寫一個讀取哈希驗證代碼的小視圖,並在用戶模型類中添加一個名爲「驗證」的狀態字段。在驗證完成之前,用戶被鎖定。 – CppLearner 2012-03-20 00:07:16