Django RestAuth自定义密码重置链接

时间:2017-10-26 04:31:29

标签: angularjs django django-rest-framework

我尝试过针对类似问题找到的解决方案,但没有一个适用于我。

我正在使用角度前端+ 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_FRONT设置开始,并附加令牌,只是喜欢我所拥有的确认。 什么是最好的解决方法?

3 个答案:

答案 0 :(得分:2)

看起来django-rest-auth使用django.contrib.auth.forms.PasswordResetForm来处理这个问题: https://github.com/Tivix/django-rest-auth/blob/master/rest_auth/serializers.py#L183

根据Django doc,你可以传递自己的电子邮件模板(注意:Django 1.11有一个重大变化,所以一定要使用你的Django版本的doc)。默认模板为registration/password_reset_form.html。您可以在django-rest-auth configuration中使用自己的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',
    }

或者它可能只是将您的网址传递为success_url

答案 1 :(得分:2)

接受的答案有效,但我也使用了前端网址作为管理信息中心的网站,它对我的​​所有网址都运行良好

答案 2 :(得分:0)

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/'