Djoser密码重置实施

时间:2020-10-12 18:24:47

标签: django 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)

1 个答案:

答案 0 :(得分:0)

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

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

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

这里是PASSWORD_RESET_CONFIRM_URL设置。因为在上述APIURL接受了正文之后,将通过链接将指向该设置中输入URL的链接发送给用户。它必须是FrontendURL!它应该由您的前端APP路由,最好显示一些屏幕。但是在后台,您的前端应用程序应将uidtoken字段的值发送到resolve("user-reset-password-confirm")返回的APIURL。

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

如果您没有路由的前端应用程序(可能使用REACT,ANGULAR或VUE编写),则可能不需要REST API,应该坚持使用django-allauth