2015-01-01 17 views
9

Sto utilizzando la funzionalità di reimpostazione della password di django incorporata. The documentation stati:Informa l'utente che l'e-mail non è valida utilizzando la Password Reset di Django

Se l'indirizzo e-mail fornito non esiste nel sistema, questo punto di vista si Non inviare una e-mail, ma l'utente non riceveranno alcun messaggio di errore sia. Ciò impedisce che le informazioni trapelino a potenziali aggressori. Se si desidera fornire un messaggio di errore in questo caso, è possibile sottoclasse PasswordResetForm e utilizzare l'argomento password_reset_form.

Tuttavia, nel mio caso è più importante mostrare un messaggio di errore quando un utente tenta di ripristinare utilizzando un nome utente errato.

Capisco cosa devo fare ma non so cosa scrivere nella sottoclasse di form PasswordResetForm.

Che cosa deve contenere la sottoclasse di password PasswordResetForm?

Grazie.

+0

Basta sovrascrivere il metodo clean per il campo del nome utente. – Brandon

risposta

10

Così ho finalmente capito da solo. Ecco la mia realizzazione:

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 

È inoltre necessario aggiungere {'password_reset_form': EmailValidationOnForgotPassword} a urls.py. Ecco un esempio:

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

Probabilmente vorrai una corrispondenza senza distinzione tra maiuscole e minuscole e solo utenti attivi: questo è il momento in cui il modulo non invia un'e-mail. Inoltre, 'exists()' sarebbe leggermente più veloce di 'get()', quindi sarebbe 'se non User.objects.filter (email__iexact = email, is_active = True) .exists(): raise ValidationError' – knbk

+0

Osservazioni eccellenti , grazie! Ho aggiornato la risposta. –

Problemi correlati