2015-02-09 10 views
12

Ich habe eine Django-Anwendung mit einem eckigen Front-End. Wenn von dem Front-End ich versuche, eine Anfrage für password zu senden, erhalte ich folgende Fehlermeldung:NoReverseMatch at/rest-auth/Passwort/Reset/

Reverse for 'password_reset_confirm' with arguments '()' and keyword arguments '{u'uidb64': 'MTE', u'token': u'3z4-eadc7ab3866d7d9436cb'}' not found. 0 pattern(s) tried: []

Es ist eine Anforderung POST http://127.0.0.1:8080/rest-auth/password/reset/ gehen

Es folgt, was meine urls.py aussieht:

from django.conf.urls import patterns, include, url 
from django.contrib import admin 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^rest-auth/', include('rest_auth.urls')), 
    url(r'^rest-auth/registration/', include('rest_auth.registration.urls')), 
    url(r'^account/', include('allauth.urls')) 
) 
+0

Möglicherweise müssen Sie uns die URLs für 'rest_auth.urls' anzeigen. – vishen

+0

Haben Sie eine Lösung gefunden? –

Antwort

1

Für mich ist das Problem dieser Linie in site-packages war/django/contrib/admin/templates/registration/password_reset_email.html:

{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %} 

Von dem, was ich verstehe das Problem ist in contrib/auth durch Reverse-Lookup nicht funktioniert für diese Linie verursacht/urls.py:

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

My (zumindest vorübergehend) Lösung, um die Vorlage zu überschreiben war und codiert die Reverse-Lookup-Teil der URL für den Link in der E-Mail.

Der Weg zum neuen Vorlage wird in settings.py angegeben:

TEMPLATE_DIRS =(
    "/absolute/path/to/my/templates/directory", 
) 

Da ich Winkel Frontend verwendet werde, änderte ich auch den Link, so dass es zum Zurücksetzen des Passworts Bestätigung über den Winkel Client löst:

{{ protocol }}://{{ domain }}/#/passwordResetConfirm/{{ uid }}/{{ token }} 
20

ich war auch dieses Problem haben, und fand diese github issue gesagt wir

url(r'^', include('django.contrib.auth.urls')), 
hinzufügen müssen

auf dem URL-Muster.

Wie dort gesagt, dass die PasswordReset-Ansicht von django.contrib.auth.views.password_reset_confirm Ansicht abhängt.

+2

Diese Lösung funktioniert. Vielen Dank. – Joni

+0

Das war's! Vielen Dank. –

+2

Stellen wir auf diese Weise keine gefährlichen Endpunkte aus? – dpstart

0

Fügen Sie diese zu Ihrem Projekt url.py

url(r'^o/', include('oauth2_provider.urls', namespace='oauth2_provider')), 
url('', include('social.apps.django_app.urls', namespace='social')), 
+3

Warum? Was ist falsch und warum repariert es das? – ppperry

2

@ AbimaelCarrasquillo Lösungen Werke einreichen, aber Sie wollen wahrscheinlich nicht diese Endpunkte als @dpstart in den Kommentaren erwähnt belichten.

Ich löste dies durch die PasswordResetSerializer von rest-auth überschrieben und einfach die Reset-Form ersetzt:

password_reset_form_class = PasswordResetForm 

aus dem internen django.contrib.auth.forms.PasswordResetForm-allauth.account.forms.ResetPasswordForm

Achten Sie auf die folgenden, um Ihre Einstellungen hinzuzufügen:

REST_AUTH_SERIALIZERS = { 
    'PASSWORD_RESET_SERIALIZER':'path.to.PasswordResetSerializer' 
}