自定义 django-allauth / django-rest-auth 密码重置确认

问题描述 投票:0回答:1

在跟进这个问题:rest-auth密码重置,我现在想要自定义以下密码重置确认页面

但说实话,后台发生了很多魔法,所以我不知道从哪里开始。

尝试在 all-auth 和 rest-auth 中查找模板,但找不到合适的模板来覆盖。

如何实现这样一个自定义的

Password Reset Confirm
视图?

django django-allauth django-rest-auth password-recovery
1个回答
0
投票

我知道有点晚了,但如果它对您或其他人有用,我会回复。

首先阅读 TestDriven 的精彩教程Django REST 框架身份验证!!!他们所有的内容都是一流的、开放且付费的。

首先,您需要使用'密码/重置/'端点。您可以在带有按钮(重置密码)的函数中调用它。您需要从前端传递到后端的唯一数据是当前登录用户的电子邮件。一封电子邮件将发送至电子邮件客户端。 (您也可以将内容发送到终端/控制台)

电子邮件将包含一个链接,如“http://blahblah/password/reset/confirm/3/123456789ee6f85f4c2e3843eb523/”

单击此按钮,它将引导您进入您设置的前端页面(在我的例子中是在 React 中)。为了使重定向正常工作,请添加教程中显示的代码“代码和配置”。特别针对密码重置:

核心/设置.py:

## <PASSWORD_RESET_CONFIRM_REDIRECT_BASE_URL>/<uidb64>/<token>/
PASSWORD_RESET_CONFIRM_REDIRECT_BASE_URL = \
    "http://localhost:3000/account/password-reset/confirm/"

身份验证/views.py

def password_reset_confirm_redirect(request, uidb64, token):
    return HttpResponseRedirect(
        f"{settings.PASSWORD_RESET_CONFIRM_REDIRECT_BASE_URL}{uidb64}/{token}/"
    )

以及在 React 的 App.js 中:

<Route path='/account/password-reset/confirm/:uid/:token' element={<ResetPassword />} />

然后,您登陆的页面将有两个字段“Password1”和“Password2”,用户应该写下他的新密码。在此页面,我们将使用“/password/reset/confirm/”端点。 onSubmit 数据应包含 'new_password1'、'new_password2'、'uid'、'token'。前两个由用户输入,后两个作为 url 中的参数。

举个例子,你可以这样传递数据:

const { uid } = useParams();
const { token } = useParams();
const onSubmit = async (e) => {
        e.preventDefault()

        const data ={
        new_password1: password1,
        new_password2: password2,
        uid: uid,
        token: token
        }
        

        const response = await fetch(`yourAuthAPIPath/password/reset/confirm/`, {
            method: 'POST',
            body: JSON.stringify(data),
            headers: {
                'content-type': 'application/json',
                'X-CSRFToken': Cookies.get('csrftoken')
            },
        })

        if(response.ok) {
            console.log("Success")
            navigate('/');
        } else {
            console.log("fail")
        }
    }

这只是一个草案,但运行良好。我希望这对您和其他用户有所帮助,我终于在这里获得了我的第一票。哈哈

© www.soinside.com 2019 - 2024. All rights reserved.