gpt4 book ai didi

django - 重置用户 django Rest Auth 的密码

转载 作者:行者123 更新时间:2023-12-02 19:41:23 27 4
gpt4 key购买 nike

美好的一天,我正在尝试覆盖 Django allauth 的password_reset_email。问题是它成功覆盖,但数据(密码重置链接、站点名称和域名)未传递到电子邮件,这最终意味着用户无法重置密码,因为没有发送链接。

我的密码重置序列化程序

class PasswordResetSerializer(PasswordResetSerializer):

def get_email_options(self):
return {
'subject_template_name': 'account/email/password_reset_key_subject.txt',
# 'email_template_name': 'account/email/password_reset_key.txt',
'html_email_template_name': 'account/password_reset_key.html',
}

在我的templates/registration/password_reset_email.html

{% load i18n %}
{% autoescape off %}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Confirm Your E-mail</title>
<style>
.body {
background-color: #f6f6f6;
padding: 30px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}

.content {
background-color: #FFFFFF;
color: #4d4d4d;
max-width: 400px;
padding: 20px;
margin: auto;
}

.title {
font-size: 20px;
font-weight: 600;
margin: 10px 0;
text-align: center
}

.intro {
font-size: 15px;
align-self: flex-start;
color: #4d4d4d;
margin-bottom: 15px;
}

.main-body {
font-size: 15px;
color: #4d4d4d;
margin-bottom: 15px;
}

.alt-body {
width: 100%;
display: flex;
flex-direction: row !important;
justify-content: center !important;
}

.alt-body>a {
font-size: 17px;
font-weight: 500;
text-decoration: none;
color: #FFFFFF;
margin: auto;
margin-bottom: 15px;
}

.cta-button {
background-color: #525659;
padding: 9px 100px;
border: 2px solid #525659;
border-radius: 35px;
align-self: center;
}

.cta-button:hover {
background-color: #000000;
border: 2px solid #000000;
}

.sub-body {
font-size: 15px;
color: #4d4d4d;
margin-bottom: 15px;
margin-top: 0;
align-self: flex-start;
}

.sub-body a {
text-decoration: none;
color: #4d4d4d;
font-size: 15px;
}

.sub-body a:hover {
text-decoration: none;
color: #4d4d4d;
}

.outro {
margin: 20px 0;
}

.outro > p {
font-size: 15px;
margin-top: 3px;
margin-bottom: 3px;
}

.outro a {
text-decoration: none;
color: #4d4d4d;
font-size: 15px;
margin-top: 3px;
margin-bottom: 3px;
}

.outro a:hover {
text-decoration: none;
color: #4d4d4d;
}
</style>
</head>
<body class="body">
<div class="content">
{% blocktrans with site_name=current_site.name site_domain=current_site.domain %}

<p class="title">Email Verification</p>

<p class="intro">Hello there,</p>

<p class="main-body">
Simply click on the button to verify your cre8ive-mart email.
</p>

<div class="alt-body">
<a href="{{ activate_url }}" class="cta-button">Verify Email</a>
</div>

<p class="sub-body">
if you have any questions, please contact <a href="mailto:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="355a4550515a50415046415047755258545c591b565a58" rel="noreferrer noopener nofollow">[email protected]</a>"><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="83ecf3e6e7ece6f7e6f0f7e6f1c3e4eee2eaefade0ecee" rel="noreferrer noopener nofollow">[email protected]</a></a>
</p>

<div class="outro">
<p class="outro-greeting">Sincerely,</p>
<p class="outro-main">cre8ive-mart</p>
<a href="#" class="outro-website">cre8ivemart.com</a>
</div>

{% endblocktrans %}
</div>
</body>
</html>
{% endautoescape %}

使用任何密码重置序列化程序都会产生与不发送数据相同的结果。

最佳答案

嗯,这是我对此的第二部分。我真的不知道 {{ activate_url }} 是什么意思?您是否将其作为额外的上下文传递?

如果不是,那么您显然必须在某个地方定义它。原始模板构造激活网址如下:

{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}

请注意,此处的所有变量都来自 django.contrib.auth.forms 中的 PasswordResetForm save 方法。如果您需要向模板传递一些额外的上下文,您可以使用 extra_email_context 来实现,如下所示:

class PasswordResetSerializer(PasswordResetSerializer):

def get_email_options(self):
request = self.context.get('request')
domain = request.get_host()
return {
'subject_template_name': 'account/email/password_reset_key_subject.txt',
'email_template_name': 'account/email/password_reset_key.txt',
'extra_email_context': {'parsed_domain': domain},
'html_email_template_name': 'account/password_reset_key.html',
}

关于django - 重置用户 django Rest Auth 的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60078367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com