簡體   English   中英

Djoser 密碼重置實現

[英]Djoser password reset implementation

我在 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',
        }
    }

網址.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(),),
    ]

視圖.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 路由進行不同的思考。

通常形式為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')返回的/users/reset_password/ (默認情況下,它返回類似/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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM