2015-02-09 48 views
12

我有一個角度前端的django應用程序。從前端當我嘗試發送的passwordReset的請求,我得到以下錯誤:NoReverseMatch at/rest-auth/password/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: []

它是一個POST請求要http://127.0.0.1:8080/rest-auth/password/reset/

下面是我的urls.py的樣子:

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

您可能需要向我們展示'rest_auth.urls'的網址。 – vishen 2015-02-09 21:57:19

+0

您是否找到了解決方案? – 2015-02-21 00:02:50

回答

1

對我來說,問題是這條線在站點包/ Django的/的contrib /管理/模板/註冊/ password_reset_email.html:

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

從我瞭解的問題是不工作的這條線在反向查找引起了contrib/auth /中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'), 

我的(至少暫時)解決方案是覆蓋模板和硬編碼反向查找電子郵件中鏈接的url部分。

到新模板的路徑settings.py中指定:

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

由於我採用了棱角分明的前端,我也改變了鏈接,以便其通過斜客戶端觸發密碼重置確認:

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

我也爲有這個問題,並發現這個github issue它說,我們需要添加

url(r'^', include('django.contrib.auth.urls')), 

上的urlpatterns。

如前所述,它表示PasswordReset視圖取決於django.contrib.auth.views.password_reset_confirm視圖。

+2

此解決方案有效。謝謝。 – Joni 2015-07-11 10:40:44

+0

就是這樣!謝謝 – 2017-07-06 09:45:29

+2

我們不是以這種方式暴露危險的終點嗎? – dpstart 2017-11-10 14:58:41

0

添加到您的項目url.py文件

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

爲什麼?什麼是錯的,爲什麼這會解決它。 – ppperry 2015-11-25 13:33:30

2

@ AbimaelCarrasquillo的解決方案的工作,但你可能不希望公開這些端點在評論中提到@dpstart。

我解決了這個通過重寫的rest-auth的PasswordResetSerializer和簡單地更換復位形式:

password_reset_form_class = PasswordResetForm 

從內部django.contrib.auth.forms.PasswordResetFormallauth.account.forms.ResetPasswordForm

確保以下添加到您的設置:

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