繁体   English   中英

如何使用 Django Rest Framework 和 Dj-rest-auth 在 React 中显示我的重置密码页面

[英]How to show my reset password page in React using Django Rest Framework and Dj-rest-auth

我有一个应用程序,它有一个 React 前端和一个 Django api 后端。 我正在尝试让密码重置页面正常工作,但我不知道如何设置 URL/路由。 我让它在本地工作,但我认为这是因为前端和后端的端口在本地不同,所以它们本质上是不同的域。

我的 Django 网址模式包括:

path('api/v1/dj-rest-auth/password/reset/confirm/<uidb64>/<token>/', PasswordResetConfirmView.as_view(), name='password_reset_confirm')

我的 Django urls 中有一个包罗万象的 url,以使前端的其余部分工作。

我的 React 路由器包括:

<Route path="/api/v1/dj-rest-auth/password/reset/confirm/:uid/:token/" component={ResetPassword} />

我的 React 密码重置页面包含:

    let url = process.env.REACT_APP_API_PATH + '/api/v1/dj-rest-auth/password/reset/confirm/' + this.props.match.params.uid + '/' +  this.props.match.params.token + '/';
    let headers = {token: this.props.match.params.token, 
                    uid: this.props.match.params.uid, 
                    new_password1: this.state.newPassword, 
                    new_password2: this.state.newPasswordConf
                  }
    axios
      .post(url, headers)

这从密码重置链接中获取令牌和 uid,然后将它们与用户的新密码一起发送到密码重置端点。

困境似乎是,我需要通过 React 访问重置链接才能获取令牌和 uid,但随后我需要访问与调用 API 相同的链接才能重置密码。

好的,我设法用一种有点厚颜无耻的方式解决了它。

我只是使用默认模板覆盖了密码重置电子邮件的模板,但只是在 url 中添加了一些额外的东西。 只是网址在某些方面有所不同。

将此模板复制到templates/registration

然后在电子邮件中创建的路径中添加一个额外的词( email - 但可以是任何词):

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

现在我可以在我的 React 路由器中使用这个新路径来获取 uid 和令牌,但是当我将数据提交到 api 时,我使用了“正确”的 url(我的 Django urlpatterns 中的那个)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM