Djoser密码重置实现



我在django后端使用djosers进行身份验证,最终我将连接到flutter前端,并且我在实现密码重置功能时遇到了问题。。。据我所知,首先我需要用电子邮件正文点击/users/reset_password/,这最终会给我身份验证令牌,该令牌将在确认重置时进一步使用,但我不明白的第一件事是设置中的PASSWORD_RESET_CONFIRM_URL字段,就像它需要一个带有uid和令牌占位符的前端链接,但这个令牌字段是什么,这个PASSWORD_RESET_CONFIRM_URL是什么,但我设法查看了一个堆栈溢出问题并填充了它,但现在当我点击/users/reset_password/时,我得到了这个错误:

[WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions

设置:

DJOSER = {
'PASSWORD_RESET_CONFIRM_URL':'reset/password/reset/confirm/{uid}/{token}',
'LOGIN_FIELD' : 'email',
'USER_CREATE_PASSWORD_RETYPE' : True,
'SERIALIZERS': {
'user_create': 'auth_app.serializers.UseriCreateSerializer',
'user': 'auth_app.serializers.UserCreateSerializer',
}
}

urls.py:


urlpatterns = [
path('',home,name='home'),
path('addInForum/',addInForum,name='addInForum'),
path('addInDiscussion/',addInDiscussion,name='addInDiscussion'),
path('<str:forum_id>/getDiscussion/',getDiscussion,name='getDiscussion'),
path('getDate/',getDate,name='getDate'),
path('reset/password/reset/confirm/<str:uid>/<str:token>/',PasswordResetView,name='PasswordResetView'),
# url(r'^reset/password/reset/confirm/(?P<uid>[w-]+)/(?P<token>[w-]+)/$', PasswordResetView.as_view(),),
]

views.py

@api_view(['GET'])
def PasswordResetView(request,uid,token):
post_data = {'uid': uid, 'token': token}
return Response(post_data)

请记住,djoser应该是基于Django REST框架的REST API的一部分。您还需要对前端应用程序的url路由进行不同的思考。。

通常,形式为CCD_;前端url";并通过前端应用程序的路由进行解析。另一方面,mydomain.com/api/something形式的URL被认为是通过Django的urls.py路由的API URL。我将把它们分别称为Fronted_URL和API_URL。

所以:重置密码的工作原理是这样的。忘记密码并想重置密码的用户肯定需要填写一些表单。此表单需要发送到resolve('user-reset-password')返回的APIURL(默认情况下,返回类似/users/reset_password/的内容(

下面是PASSWORD_RESETCONFIRM_URL设置。因为在正文被上述APIURL接受后,将向用户发送一封邮件,其中包含指向在该设置中输入的URL的链接。它必须是前端URL!它应该由你的前端应用程序路由,最好显示一些屏幕。但在后台,您的前端应用程序应该将uidtoken字段的值发送到resolve("user-reset-password-confirm")返回的APIURL。

这个流程允许您的前端应用程序正确处理响应并向用户显示适当的消息,然后可能将他们重定向到其他屏幕。

如果你没有路由的前端应用程序(可能是用REACT、ANGULAR或VUE编写的(,那么你可能不需要REST API,应该只使用django-allauth。

相关内容

  • 没有找到相关文章

最新更新