Django RestAuth自定义密码重置链接

5

我尝试了类似问题的解决方案,但都没有对我起作用。

我正在使用Angular前端+DRF+Django Rest Auth。对于确认网址,我能够通过添加一个自定义适配器来重载它,使其指向我的前端,该适配器如下所示:

class AccountAdapter(DefaultAccountAdapter):

    def send_mail(self, template_prefix, email, context):
        context['activate_url'] = settings.URL_FRONT + \
            'access/verify-email/' + context['key']
        msg = self.render_mail(template_prefix, email, context)
        msg.send()

使用URL_FRONT = 'http://localhost:8080/app/#/'作为设置,将用户重定向到客户端。

我的问题是如何实现重置密码的URL。我希望它以URL_FRONT设置开头,并像确认那样附加令牌。最好的方法是什么?


现在重置密码在哪里显示? - Tarun Lalwani
它显示了Django网站的URL。因此,在本地主机上,它是localhost:8000,我希望它显示http://localhost:8080/app/#/作为URL。 - Bernard 'Beta Berlin' Parah
3个回答

6
看起来django-rest-auth使用django.contrib.auth.forms.PasswordResetForm来处理这个问题: https://github.com/Tivix/django-rest-auth/blob/master/rest_auth/serializers.py#L183 根据Django文档,你可以传递自己的电子邮件模板(注意:Django 1.11有重大更改,请确保使用您的Django版本文档)。默认模板是registration/password_reset_form.html。您可以通过在django-rest-auth配置中使用自己的PasswordResetSerializer(扩展rest_auth.serializers.PasswordResetSerializer)来覆盖此模板。
在那里,您可以重写get_email_options()方法并设置自己的模板。
def get_email_options(self):
    return {
        'email_template_name': 'path/to/your/txt_template.html',
        'html_email_template_name': 'path/to/your/html_template.html',
    }

也许只需将您的URL作为success_url传递即可。

这个可以工作,当我使用不同的密码序列化程序时,我错过了get_email_options部分。 - Bernard 'Beta Berlin' Parah
答案非常好,但是以那种方式做时,由于某些原因请求为none:/,我没有发送任何上下文。 - Piero Pajares

2

接受的答案可行,但我也在管理仪表板中使用了前端URL作为站点,这对于我的所有URL都非常完美地起作用。


你能进一步解释一下吗? - Diesel
1
我已经在数据库中将网站名称更新为客户网址的域名。例如,如果客户的网址是app.example.com,请在您的数据库中进行更新或创建一个新的站点,并设置SITE_ID=2 - Bernard 'Beta Berlin' Parah

-1

settings.py中定义这些变量

  URL_FRONT = 'http://localhost:8080/app/#/'
  ACCOUNT_EMAIL_CONFIRMATION_URL = URL_FRONT+ 'verify-email/{}'
  ACCOUNT_PASSWORD_RESET_CONFIRM = URL_FRONT+ 'password-reset/confirm/'

当我尝试时,这对我没有起作用,我还在另一个问题中看到了相同的答案。 - Bernard 'Beta Berlin' Parah
1
被踩了,这是一个不完整的复制粘贴答案:https://dev59.com/jZzga4cB1Zd3GeqP_xdR?rq=1 - Vektrat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接