0

Ich verwende Django-Registrierung in meiner Django-Anwendung mit HMAC workflow. Nach der Registrierung wird eine E-Mail mit dem Aktivierungslink an den Benutzer gesendet.Django-Registrierung Passwort zurücksetzen Fehler

ich die Versionen bin mit unten:

Django==1.11.1 
django-registration==2.3 

Ich sah here, dass es zwei verschiedene Ansichten (Funktion ou Klasse), die verwendet haben werden könnte. Ich habe einen Breakpoint in den auth_urls.py gesetzt und habe gesehen, dass in meiner Applikation die registration.auth_urls_classes verwendet werden.

Ich habe einen Link erstellt, um mein Passwort zurücksetzen Seite zu gehen:

<a class="g-font-size-12" href="{% url 'auth_password_reset' %}">Esqueceu a senha?</a> 

Dieser Link zum Template password_reset_form.html sendet, ist es in dem Bild unten:

{% extends "base.html" %} 
{% load i18n %} 

{% block content %} 
<div class="row justify-content-center g-py-180"> 
    <div class="col-sm-10 col-md-9 col-lg-4"> 
     <header class="text-center g-mb-30"> 
      <h2 class="h2 g-color-black g-font-weight-600"> Resete sua senha </h2> 
     </header> 
     <form method="post" action="{% url 'auth_password_reset' %}"> 
      <h1 class="h5 g-font-weight-300">Forneça seu endereço de email e nós enviaremos para você um link para alterar sua senha.</h1> 


      {% csrf_token %} 

      {% for field in form %} 
       {% if field.name == 'email' %} 
        <div class="mb-4 mt-4"> 
         <input class="form-control g-color-black g-bg-white g-bg-white--focus g-brd-gray-light-v4 
         g-brd-primary--hover rounded g-py-15 g-px-15" type="email" required 
         placeholder="[email protected]" name="{{ field.html_name }}" id="{{ field.auto_id }}"> 
        </div> 
       {% endif %} 
      {% endfor %} 
      <button class="g-min-width-100x btn btn-md u-btn-primary rounded g-py-13 g-px-25" type="submit" value="Submit">Enviar email de redefinição de senha</button> 
     </form> 
    </div> 
</div> 
{% endblock %} 

Nach Geben Sie die E-Mail-Adresse und senden Sie das Formular, wird die E-Mail korrekt gesendet (E-Mail kam zu mir), aber der Fehler unten aufgetreten:

Seite nicht gefunden (404) anfordern Methode: GET-Request URL: http://127.0.0.1:8000/accounts/password/reset/auth_password_reset_done

Meine Urls wie unten definiert sind:

urlpatterns = [ 
    url(r'^$', TemplateView.as_view(template_name='index.html'), name='home'), 

    #authentication 
    url(r'^accounts/', include('registration.backends.hmac.urls')), 

    url(r'^profile/', include('pxgbr2.account_settings.urls', namespace='profile')), 
    url(r'^admin/', admin.site.urls), 
] 

if settings.DEBUG: 
    urlpatterns += static(settings.MEDIA_URL, 
document_root=settings.MEDIA_ROOT) 

Beachten Sie, dass der Name des Erfolgs-URL (auth_password_reset_done ') wurde „angehängt "in der Verbindung, anstatt durch das Muster ersetzt zu werden. Ich konnte jedoch nicht herausfinden, warum.

+1

Veröffentlichen Sie keine Screenshots von Text. –

Antwort

1

Sie scheinen this issue getroffen zu haben. Es gibt einen Fix pull request #111, die Sie könnten versuchen, oder es könnte einfacher sein Djangos Auth URLs selbst enthalten:

url('^accounts/', include('django.contrib.auth.urls')), 
url('^accounts/', include('registration.backends.hmac.urls')), 

Die registration.auth_urlswill be removed in django-registration 3.0, so auch die Auth Urls separat ist der beste Ansatz für die Zukunft.

+0

Ich habe das bereits versucht, und es funktionierte in diesem Fall, aber die gleiche Art von Fehler tritt auf, wenn ich das Formular in der Seite 'password_reset_confirm.html' sendete, und ich konnte es nicht beheben, da ich {% url ' password_reset_confirm '%} in dieser Form erwartet es einige Parameter (Token und Uuid). Deshalb suche ich nach einer Lösung, die nur die Django-Registrierung verwendet. Ich sah die Pull-Anfrage und sieht aus, als was ich brauche. Wenn es der Fall ist, wie könnte es als Abhängigkeit in meinem Projekt hinzugefügt werden, ohne Django-Registrierung mit dieser Modifikation freizugeben? –

+1

Siehe [diese Frage] (https://stackoverflow.com/questions/13561618/pip-how-to-install-a-git-pull-request) für die Installation einer Pull-Anfrage mit pip. – Alasdair

+1

Beachten Sie, dass Sie * immer * Token und Uuid benötigen, wenn Sie die Ansicht 'password_reset_confirm' umkehren, dies ist [in den Dokumenten] (https://docs.djangoproject.com/en/2.0/topics/auth/default/#django). contrib.auth.views.PasswordResetView). – Alasdair