首页 文章

Django AllAuth - 如何手动发送重置密码电子邮件?

提问于
浏览
4

在我的应用程序中,我正在使用Django Allauth . 我没有任何用户注册表 . 管理员将通过上载包含用户信息的excel文件来注册用户 . 我已完成所有这些操作,用户通过自动生成密码保存在用户表中 . 上传用户列表并将其保存在数据库中后,我想向每个用户发送重置密码电子邮件 .

在allauth重置密码时,您首先需要重置页面 account/password/reset/ 并输入您的电子邮件 . 然后发送一封电子邮件,指示您更改密码 account/password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/

是否可以直接在应用程序中发送电子邮件?网址包含一个我不知道如何生成的密钥!!或者有更好的方法吗?

1 回答

  • 3

    这是可能的 . 我的解决方案实现了用户模型post_save信号,以调用Allauth Password重置视图,该视图将向用户发送电子邮件 . 首先要考虑的是在admin用户创建表单中强制要求用户电子邮件地址(如here所述) . 然后使用此代码:

    from allauth.account.views import PasswordResetView
    
    from django.conf import settings
    from django.dispatch import receiver
    from django.http import HttpRequest
    from django.middleware.csrf import get_token
    
    
    @receiver(models.signals.post_save, sender=settings.AUTH_USER_MODEL)
    def send_reset_password_email(sender, instance, created, **kwargs):
    
        if created:
    
            # First create a post request to pass to the view
            request = HttpRequest()
            request.method = 'POST'
    
            # add the absolute url to be be included in email
            if settings.DEBUG:
                request.META['HTTP_HOST'] = '127.0.0.1:8000'
            else:
                request.META['HTTP_HOST'] = 'www.mysite.com'
    
            # pass the post form data
            request.POST = {
                'email': instance.email,
                'csrfmiddlewaretoken': get_token(HttpRequest())
            }
            PasswordResetView.as_view()(request)  # email will be sent!
    

相关问题