我们在生产中使用 django-allauth 已经有一段时间了。我们可以启用帐户电子邮件验证,效果很好。但是我们现在有一个 REST api,它允许用户通过 API 注册,并且工作流不通过 django-allauth。是否可以手动调用 django-allauth 电子邮件验证功能,或者我们是否需要使用自定义解决方案?
最佳答案
我将在这里发布我的答案,因为我一直在寻找使用 Django 内置身份验证(并使用自定义身份验证模型)添加电子邮件验证,我使用了 Marcus 提到的方法,我将添加所有其他内容对于任何想要做同样事情的人来说。
第一:按照说明安装 django-allauth here
第二:在 settings.py
中添加您的电子邮件配置文件 :
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com' #I used gmail in my case
EMAIL_HOST_USER = <Your Email>
EMAIL_HOST_PASSWORD = <Your Password>
EMAIL_PORT = 587
DEFAULT_FROM_EMAIL = <Default Sender name and email>
第三:添加验证和默认登录url的配置,你会找到所有配置参数的文档here ,请注意,在我的示例中,我使用了前面提到的自定义用户模型,这就是我设置
ACCOUNT_EMAIL_REQUIRED
的原因。至 True
& ACCOUNT_USER_MODEL_USERNAME_FIELD
和 ACCOUNT_USERNAME_REQUIRED
至 False
,还有 LOGIN_URL
, ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL
和 LOGIN_REDIRECT_URL
参数在用户点击通过电子邮件发送给他的确认链接后使用ACCOUNT_EMAIL_VERIFICATION='mandatory'
ACCOUNT_CONFIRM_EMAIL_ON_GET=True
ACCOUNT_EMAIL_REQUIRED=True
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
LOGIN_URL='app:login_user'
LOGIN_REDIRECT_URL='app:login_user'
ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL='app:login_user'
第四:在您的注册表单之后,使用
is_active
保存用户实例参数设置为 False
,然后调用方法:from allauth.account.utils import *
send_email_confirmation(request, user, True)
最后:用户确认邮件后收到信号,设置
is_active
至 True
from allauth.account.signals import email_confirmed
from django.dispatch import receiver
# Signal sent to activate user upon confirmation
@receiver(email_confirmed)
def email_confirmed_(request, email_address, **kwargs):
user = MyUser.objects.get(email=email_address.email)
user.is_active = True
user.save()
最后,您可能希望从 Django Admin 更改默认站点名称,因为它将包含在发送的电子邮件中。
关于django-allauth - 手动调用电子邮件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33877074/