在跟进这个问题:rest-auth密码重置,我现在想要自定义以下密码重置确认页面
但说实话,后台发生了很多魔法,所以我不知道从哪里开始。
尝试在 all-auth 和 rest-auth 中查找模板,但找不到合适的模板来覆盖。
如何实现这样一个自定义的
Password Reset Confirm
视图?
我知道有点晚了,但如果它对您或其他人有用,我会回复。
首先阅读 TestDriven 的精彩教程Django REST 框架身份验证!!!他们所有的内容都是一流的、开放且付费的。
首先,您需要使用'密码/重置/'端点。您可以在带有按钮(重置密码)的函数中调用它。您需要从前端传递到后端的唯一数据是当前登录用户的电子邮件。一封电子邮件将发送至电子邮件客户端。 (您也可以将内容发送到终端/控制台)
电子邮件将包含一个链接,如“http://blahblah/password/reset/confirm/3/123456789ee6f85f4c2e3843eb523/”
单击此按钮,它将引导您进入您设置的前端页面(在我的例子中是在 React 中)。为了使重定向正常工作,请添加教程中显示的代码“代码和配置”。特别针对密码重置:
## <PASSWORD_RESET_CONFIRM_REDIRECT_BASE_URL>/<uidb64>/<token>/
PASSWORD_RESET_CONFIRM_REDIRECT_BASE_URL = \
"http://localhost:3000/account/password-reset/confirm/"
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")
}
}
这只是一个草案,但运行良好。我希望这对您和其他用户有所帮助,我终于在这里获得了我的第一票。哈哈