Django使用Rest API进行密码重置

6

我们的团队在后端使用django-rest-api,在前端使用angular-2进行项目开发。我们遇到了密码重置的问题。以下是相关的url:

from django.contrib.auth import views as auth_views
urlpatterns = patterns(
'',
url(r'^password_reset/$', auth_views.password_reset, name='password_reset'),

url(r'^password_reset/done/$', auth_views.password_reset_done, name='password_reset_done'),

url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',auth_views.password_reset_confirm, name='password_reset_confirm'),

url(r'^reset/done/$', auth_views.password_reset_complete, name='password_reset_complete'),
)

当用户发送重置密码请求时,会收到一封包含重置密码令牌链接的电子邮件。该令牌应在24小时内过期。
我们想要创建一个重置密码API,这样我们就可以使用Postman更改密码,并且前端开发人员也可以使用此API。

太大了。你必须维护一个表,然后必须有一个视图来处理发送密码重置邮件的操作。 - Arpit Solanki
1个回答

14

您可以按照以下基本步骤进行 -

1) UI - Press reset password
2) UI - Type Email Id for verify (token will go to this ID)
   a) Backend -  Get email and verify/authenticate it
   b) Generate a token [ you can use from drive.utils import 
      get_random_number ]
           1) Save in DB - Token code, Email , Date(+1 day)
   c) Send Email with Token
   d) render to new html with email id 
     return render(request, 'forgot_password.html', {'email': email})     
3) UI - GET token code from user  ( pass email (from above) along with 
   code)
   a) verify code and check if its expire (current date < code date)
   b) if verified render to change password page (pass email)
4) UI - GET New Password from user (email from above)
   a) change password 

嗨@Vicamathur,我已经按照每个步骤进行了操作,但现在卡在“pint 4)a)更改密码”上了。您能告诉我如何在我有用户邮件和要为用户设置的新密码的情况下更改用户的密码吗? - Abdul Khalid
2
在 Django 中,您必须使用 set_password() 函数为 Auth 用户设置密码,不能使用 user.password = "new password" 的方式。您需要使用 user.set_password("new password"),然后执行 user.save() 和 user = User.objects.get(email=user_email)。 - Vaibhav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接