2015-01-01 17 views
9

Tôi đang sử dụng chức năng đặt lại mật khẩu django tích hợp sẵn. The documentation tiểu bang:Thông báo cho người dùng rằng email không hợp lệ bằng cách sử dụng Đặt lại mật khẩu của Django

Nếu địa chỉ email được cung cấp không tồn tại trong hệ thống, chế độ xem này sẽ không gửi email nhưng người dùng cũng sẽ không nhận được bất kỳ thông báo lỗi nào. Điều này ngăn ngừa rò rỉ thông tin cho kẻ tấn công tiềm năng. Nếu bạn muốn cung cấp một thông báo lỗi trong trường hợp này, bạn có thể phân lớp PasswordResetForm và sử dụng đối số password_reset_form.

Tuy nhiên, trong trường hợp của tôi, điều quan trọng hơn là hiển thị thông báo lỗi khi người dùng cố đặt lại bằng tên người dùng sai.

Tôi hiểu những gì tôi cần làm nhưng tôi không biết phải viết gì trong biểu mẫu phân lớp PasswordResetForm.

Biểu mẫu con của lớp con PasswordResetForm có chứa gì?

Cảm ơn bạn.

+0

Chỉ cần ghi đè phương pháp làm sạch cho trường tên người dùng. – Brandon

Trả lời

10

Vì vậy, cuối cùng tôi đã tự tìm ra. Đây là triển khai của tôi:

class EmailValidationOnForgotPassword(PasswordResetForm): 
    def clean_email(self): 
     email = self.cleaned_data['email'] 
     if not User.objects.filter(email__iexact=email, is_active=True).exists(): 
      raise ValidationError("There is no user registered with the specified email address!") 

     return email 

Bạn cũng cần phải thêm {'password_reset_form': EmailValidationOnForgotPassword} to urls.py. Dưới đây là ví dụ:

url(r'^user/password/reset/$', 
    'django.contrib.auth.views.password_reset', 
    {'post_reset_redirect': '/user/password/reset/done/', 
    'html_email_template_name': 'registration/password_reset_email.html', 
    'password_reset_form': EmailValidationOnForgotPassword}, 
    name="password_reset"), 
+2

Bạn có thể muốn một đối sánh không phân biệt dạng chữ và chỉ người dùng đang hoạt động: đó là khi biểu mẫu không gửi email. Ngoài ra, 'exist()' sẽ hơi nhanh hơn 'get()', do đó, nó sẽ là 'nếu không User.objects.filter (email__iexact = email, is_active = True) .exists(): tăng ValidationError' – knbk

+0

Quan sát tuyệt vời , cảm ơn bạn! Tôi đã cập nhật câu trả lời. –

Các vấn đề liên quan