手动调用电子邮件验证

Cli*_*f F 4 django-allauth

我们在生产中使用 django-allauth 已经有一段时间了。我们可以启用帐户电子邮件验证,效果很好。但是我们现在有一个 REST api,它允许用户通过 API 注册,并且工作流不通过 django-allauth。是否可以手动调用 django-allauth 电子邮件验证功能,或者我们是否需要使用自定义解决方案?

P. *_*oum 6

我将在这里发布我的答案,因为我一直在寻找使用 Django 内置身份验证(并使用自定义身份验证模型)添加电子邮件验证,我使用了 Marcus 提到的方法,我将添加所有其他内容对于任何想要做同样事情的人来说。

首先:按照此处所述安装 django-allauth

第二: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>
Run Code Online (Sandbox Code Playgroud)

第三:添加验证和默认登录 url 的配置,您将在此处找到所有配置参数的文档,请注意,在我的示例中,我使用的是前面提到的自定义用户模型,这就是我设置ACCOUNT_EMAIL_REQUIREDTrue&ACCOUNT_USER_MODEL_USERNAME_FIELDACCOUNT_USERNAME_REQUIREDto 的原因False,在用户单击通过电子邮件发送给他的确认链接后LOGIN_URL,也会使用,ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URLLOGIN_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'
Run Code Online (Sandbox Code Playgroud)

第四:在您的注册表单后,保存is_active参数设置为的用户实例False,然后调用方法:

from allauth.account.utils import *
send_email_confirmation(request, user, True)
Run Code Online (Sandbox Code Playgroud)

最后:收到用户确认邮件后的信号,并设置is_activeTrue

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()
Run Code Online (Sandbox Code Playgroud)

最后,您可能希望从 Django Admin 更改默认站点名称,因为它将包含在发送的电子邮件中。