密码重置 django-allauth 和 django-rest-auth
Password reset django-allauth and django-rest-auth
我无法解决这个问题。阅读了很多解决方案,但似乎找不到适合我的正确组合。
我想从我的 (android/iOS) 应用程序中启动用户密码重置流程。
我想我需要 django-rest-auth
来公开一个 API 端点,如下所示:
from rest_auth.views import PasswordResetView
urlpatterns = [
path('password/reset/', PasswordResetView.as_view(), name='rest_password_reset'),
]
现在使用 { "email": "test1@test.com" }
的 JSON 有效负载发布到 http://127.0.0.1:8000/password/reset/
会出现错误:django.urls.exceptions.NoReverseMatch: Reverse for 'password_reset_confirm' not found.
现在,我正在为下一部分而苦苦挣扎。我发现 password_reset_confirm 是在 django.contrib.auth
中定义的,但我不想向用户公开 admin-like
接口。
我想使用 allauth PasswordResetFromKeyView
。
因此,将 password_reset_confirm
定义为:
path('password/reset/<uidb64>/<token>/',
PasswordResetFromKeyView.as_view(),
name='password_reset_confirm'
),
有效。已发送一封包含重置 URL 的电子邮件。但是现在,在URL之后我又遇到了另一个错误:PasswordResetFromKeyView.dispatch() missing 2 required positional arguments: 'uidb36' and 'key'
好吧,显而易见,将 password_reset_confirm
路径参数从 <uidb64>
和 <token>
更改为 <uidb36>
和 <key>
。
由于中的参数,错误移至 password_reset_email.html
{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
好的,也将其更改为 uidb32=uid
and key=token
导致 HTML 页面显示“BAD TOKEN”。
现在,我完全不知所措。
如何配置 django-allauth 和 django-rest-auth 以便我可以执行休息请求以发送包含有效 URL 的电子邮件,用户可以使用它来更改 his/her 密码?
更新: 我刚刚看到 django-allauth 不再维护,您应该切换到:dj-rest-auth。现在这个过程重新开始...
好的,下面的作品,post供参考,因为我在这上面浪费了很多时间。
Pip文件:
[packages]
django = "~=3.0"
django-allauth = "0.50.0"
django-rest-auth = "0.9.5"
urls.py:
from django.contrib import admin
from django.urls import path, re_path
# Register
from allauth.account.views import ConfirmEmailView
from rest_auth.registration.views import RegisterView, VerifyEmailView
# Password reset
from rest_auth.views import PasswordResetView, PasswordResetConfirmView
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^confirm-email/(?P<key>[-:\w]+)/$',
ConfirmEmailView.as_view(), name='account_confirm_email'),
path('user/register/',
RegisterView.as_view(),
name='rest_register'
),
path('user/verify-email/',
VerifyEmailView.as_view(),
name='rest_verify_email'
),
# Password reset
path('user/password/reset/',
PasswordResetView.as_view(),
name='rest_password_reset'
),
path('user/password/reset/confirm/<uidb64>/<token>/',
PasswordResetConfirmView.as_view(),
name='password_reset_confirm'),
]
我能够 post 到: http://127.0.0.1:8000/user/password/reset/
JSON 有效载荷 { "email": "test1@test.com" }
.
通过重置 URL 生成电子邮件,单击此 URL 会将用户带到 Django 的可浏览 API 页面:
但是,此页面无意向用户公开。所以我的下一个问题是 S.O。是:How to create a custom page for the user to reset his/her password?
我无法解决这个问题。阅读了很多解决方案,但似乎找不到适合我的正确组合。
我想从我的 (android/iOS) 应用程序中启动用户密码重置流程。
我想我需要 django-rest-auth
来公开一个 API 端点,如下所示:
from rest_auth.views import PasswordResetView
urlpatterns = [
path('password/reset/', PasswordResetView.as_view(), name='rest_password_reset'),
]
现在使用 { "email": "test1@test.com" }
的 JSON 有效负载发布到 http://127.0.0.1:8000/password/reset/
会出现错误:django.urls.exceptions.NoReverseMatch: Reverse for 'password_reset_confirm' not found.
现在,我正在为下一部分而苦苦挣扎。我发现 password_reset_confirm 是在 django.contrib.auth
中定义的,但我不想向用户公开 admin-like
接口。
我想使用 allauth PasswordResetFromKeyView
。
因此,将 password_reset_confirm
定义为:
path('password/reset/<uidb64>/<token>/',
PasswordResetFromKeyView.as_view(),
name='password_reset_confirm'
),
有效。已发送一封包含重置 URL 的电子邮件。但是现在,在URL之后我又遇到了另一个错误:PasswordResetFromKeyView.dispatch() missing 2 required positional arguments: 'uidb36' and 'key'
好吧,显而易见,将 password_reset_confirm
路径参数从 <uidb64>
和 <token>
更改为 <uidb36>
和 <key>
。
由于中的参数,错误移至 password_reset_email.html
{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
好的,也将其更改为 uidb32=uid
and key=token
导致 HTML 页面显示“BAD TOKEN”。
现在,我完全不知所措。 如何配置 django-allauth 和 django-rest-auth 以便我可以执行休息请求以发送包含有效 URL 的电子邮件,用户可以使用它来更改 his/her 密码?
更新: 我刚刚看到 django-allauth 不再维护,您应该切换到:dj-rest-auth。现在这个过程重新开始...
好的,下面的作品,post供参考,因为我在这上面浪费了很多时间。
Pip文件:
[packages]
django = "~=3.0"
django-allauth = "0.50.0"
django-rest-auth = "0.9.5"
urls.py:
from django.contrib import admin
from django.urls import path, re_path
# Register
from allauth.account.views import ConfirmEmailView
from rest_auth.registration.views import RegisterView, VerifyEmailView
# Password reset
from rest_auth.views import PasswordResetView, PasswordResetConfirmView
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^confirm-email/(?P<key>[-:\w]+)/$',
ConfirmEmailView.as_view(), name='account_confirm_email'),
path('user/register/',
RegisterView.as_view(),
name='rest_register'
),
path('user/verify-email/',
VerifyEmailView.as_view(),
name='rest_verify_email'
),
# Password reset
path('user/password/reset/',
PasswordResetView.as_view(),
name='rest_password_reset'
),
path('user/password/reset/confirm/<uidb64>/<token>/',
PasswordResetConfirmView.as_view(),
name='password_reset_confirm'),
]
我能够 post 到: http://127.0.0.1:8000/user/password/reset/
JSON 有效载荷 { "email": "test1@test.com" }
.
通过重置 URL 生成电子邮件,单击此 URL 会将用户带到 Django 的可浏览 API 页面:
但是,此页面无意向用户公开。所以我的下一个问题是 S.O。是:How to create a custom page for the user to reset his/her password?