gpt4 book ai didi

django - 测试 Django 1-5 重置密码表单 - 如何生成测试 token ?

转载 作者:行者123 更新时间:2023-12-02 10:06:06 24 4
gpt4 key购买 nike

通过以下测试, token 未被识别为有效。在我的手动测试中,它正在工作,所以我猜想我在生成密码的方式中遗漏了一些东西。

def test_actual_reset_password(self):
new_password = "myNewPassword012*"
token_generator = PasswordResetTokenGenerator()
user = UserFactory.create()
token = token_generator.make_token(user=user)

response = self.assert_page_loading(path="/forgot-password/reset/{0}/".format(token))
print response
# That loads the page with the error message mentioning that the token was already used

# So I cannot carry on:
form = response.form
form['new_password1'] = new_password
form['new_password2'] = new_password

response = form.submit()

在django源代码中,在PasswordResetForm中,我找到了这段代码;我看不出有什么区别:

def save(self, ..., token_generator=default_token_generator, ...):
"""
Generates a one-use only link for resetting password and sends to the
user.
"""
...
for user in self.users_cache:
...
c = {
...
'token': token_generator.make_token(user),
...
}
...
send_mail(subject, email, from_email, [user.email])

最佳答案

好吧,我只是在寻找有关如何执行此操作的信息,你的问题促使我自己弄清楚。我不确定您是否仍在致力于此,但我是这样实现的:

from django.core import mail
# First we get the initial password reset form.
# This is not strictly necessary, but I included it for completeness
response = self.c.get(reverse('password_reset'))
self.assertEqual(response.status_code, 200)
self.assertEqual(response.template_name, 'authentication/password_reset_form.html')

# Then we post the response with our "email address"
response = self.c.post(reverse('password_reset'),{'email':'fred@home.com'})
self.assertEqual(response.status_code, 302)
# At this point the system will "send" us an email. We can "check" it thusly:
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].subject, 'Password reset on example.com')

# Now, here's the kicker: we get the token and userid from the response
token = response.context[0]['token']
uid = response.context[0]['uid']
# Now we can use the token to get the password change form
response = self.c.get(reverse('password_reset_confirm', kwargs={'token':token,'uidb64':uid}))
self.assertEqual(response.status_code, 200)
self.assertEqual(response.template_name, 'authentication/password_reset_confirm.html')

# Now we post to the same url with our new password:
response = self.c.post(reverse('password_reset_confirm',
kwargs={'token':token,'uidb36':uid}), {'new_password1':'pass','new_password2':'pass'})
self.assertEqual(response.status_code, 302)

就是这样!毕竟没那么难。

关于django - 测试 Django 1-5 重置密码表单 - 如何生成测试 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18264724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com