首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Djoser密码重置实现

Djoser密码重置实现
EN

Stack Overflow用户
提问于 2020-10-13 02:24:47
回答 1查看 575关注 0票数 0

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

代码语言:javascript
复制
[WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions

设置:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    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

代码语言:javascript
复制
    @api_view(['GET'])
    def PasswordResetView(request,uid,token):
        post_data = {'uid': uid, 'token': token}
        return Response(post_data)
EN

回答 1

Stack Overflow用户

发布于 2020-10-13 03:41:56

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

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

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64323352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档