在我的应用程序中,我正在使用Django Allauth。我没有任何用户注册表。管理员将通过上载包含用户信息的excel文件来注册用户。我已完成所有这些操作,用户通过自动生成密码保存在用户表中。上传用户列表并将其保存在数据库中后,我想向每个用户发送重置密码电子邮件。
在allauth重置密码时,您首先需要重置页面account/password/reset/
并输入您的电子邮件。然后会发送一封电子邮件,指示您更改密码account/password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/
是否可以直接在应用内发送电子邮件?网址包含一个我不知道如何生成的密钥!!或者有更好的方法吗?
答案 0 :(得分:4)
这是可能的。我的解决方案实现了用户模型post_save信号,以调用Allauth Password重置视图,该视图将向用户发送电子邮件。首先要考虑的是在管理员用户创建表单中强制要求用户电子邮件地址(如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!
答案 1 :(得分:0)
您可以尝试使用以下方式获取特定用户的网址:
from allauth.account.forms import EmailAwarePasswordResetTokenGenerator
from allauth.account.utils import user_pk_to_url_str
token_generator = EmailAwarePasswordResetTokenGenerator()
user = User.objects.get(email='example@example.com')
temp_key = token_generator.make_token(user)
path = reverse("account_reset_password_from_key",
kwargs=dict(uidb36=user_pk_to_url_str(user), key=temp_key))