【发布时间】:2022-01-26 18:05:54
【问题描述】:
我是 Django Rest Framework 的新手,正在研究 DRF 和 React 身份验证系统。一切正常,除了密码重置。我遇到的问题是,当用户请求重置密码时,带有生成令牌的重置 URL 被触发到注册的电子邮件。因此,用户可以单击带有嵌入令牌的链接并返回调用(或任何其他)URL。
http://127.0.0.1:8000/api/auth/password_reset/validate_token/?token=wBBAIfQHzTJVz9bKPLkIgB
问题是如何生成视图或序列化程序以动态处理带有令牌的 URL。我只需要了解我正在使用“django-rest-passwordreset1.2.1”,(https://pypi.org/project/django-rest-passwordreset/) 包的完整流程,因此我使用模型生成重置电子邮件和令牌,根据文档触发信号以生成令牌并发送电子邮件。文档附带的端点在邮递员测试中验证并正常工作。我只是不确定如何在 Django 中创建该功能。任何帮助或链接到一个好的教程将不胜感激。
非常感谢提前
models.py
from django.dispatch import receiver
from django.urls import reverse
from django_rest_passwordreset.signals import reset_password_token_created
from django.core.mail import send_mail
@receiver(reset_password_token_created)
def password_reset_token_created(sender, instance, reset_password_token, *args,
**kwargs):
site = 'http://127.0.0.1:3000'
email_plaintext_message = "{}?token={}".format(reverse('password_reset:reset-password-validate'), reset_password_token.key)
reset_url = site + email_plaintext_message
send_mail(
"Password Reset for {title}".format(title="Some website title"),
reset_url,
"noreply@somehost.local",
[reset_password_token.user.email]
)
urls.py
urlpatterns = [
path('api/auth', include('knox.urls')),
path('api/auth/register', RegisterAPI.as_view()),
path('api/auth/login', LoginAPI.as_view()),
path('api/auth/user', UserAPI.as_view()),
path('api/auth/logout', knox_views.LogoutView.as_view(), name="knox_logout"),
path('api/auth/change-password/', ChangePasswordView.as_view(), name='change-password')
path('api/auth/password_reset/', include('django_rest_passwordreset.urls')),
path('admin/', admin.site.urls),
]
include('django_rest_passwordreset.urls')) 提供以下网址: POST ${API_URL}/ - 使用 email 参数请求重置密码令牌* POST ${API_URL}/confirm/ - 使用有效令牌,将用户密码设置为提供的密码 POST ${API_URL}/validate_token/ - 如果给定的令牌有效,将返回 200 其中 ${API_URL}/ 是您的 urls.py 中指定的 url(例如,如上例中的 api/auth/password_reset/)*
【问题讨论】:
标签: django-rest-framework change-password forgot-password reset-password