2015-02-09 25 views
12

Tôi có một ứng dụng django với giao diện người dùng. Khi từ front-end Tôi cố gắng để gửi một yêu cầu cho passwordReset, tôi nhận được lỗi sau:NoReverseMatch tại/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: []

nó một yêu cầu POST sẽ http://127.0.0.1:8080/rest-auth/password/reset/

Sau đây là những gì urls.py của tôi trông giống như:

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

Bạn có thể cần hiển thị cho chúng tôi các url cho 'rest_auth.urls'. – vishen

+0

Bạn có tìm thấy giải pháp về vấn đề này không? –

Trả lời

1

Đối với tôi vấn đề là dòng này vào trang web-gói/django/contrib/admin/templates/đăng ký/password_reset_email.html:

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

Từ những gì tôi hiểu được vấn đề là do tra cứu ngược lại không làm việc cho dòng này trong 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'), 

My (ít nhất là tạm thời) Giải pháp là để ghi đè lên mẫu và hardcode phần tra cứu ngược của url cho liên kết trong email.

Đường dẫn đến các mẫu mới đã được quy định tại settings.py:

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

Kể từ khi tôi đang sử dụng góc cuối phía trước, tôi cũng đã thay đổi liên kết để nó gây nên xác nhận thiết lập lại mật khẩu qua client góc:

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

tôi cũng đã có vấn đề này, và thấy github issue này nó nói chúng ta cần thêm

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

trên urlpatterns.

Như đã nêu ở đó, chế độ xem PasswordReset phụ thuộc vào chế độ xem django.contrib.auth.views.password_reset_confirm.

+2

Giải pháp này hoạt động. Cảm ơn. – Joni

+0

Đúng rồi! Cảm ơn bạn –

+2

Chúng tôi không phơi bày các điểm cuối nguy hiểm theo cách này? – dpstart

0

Thêm phần này vào dự án của bạn url.py nộp

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

Tại sao? Điều gì là sai và tại sao điều này sửa chữa nó. – ppperry

2

@ các giải pháp công trình AbimaelCarrasquillo nhưng có thể bạn không muốn để lộ những điểm cuối như @dpstart đề cập trong các ý kiến.

tôi giải quyết này bằng cách ghi đè các PasswordResetSerializer của rest-auth và chỉ đơn giản là thay thế các hình thức reset:

password_reset_form_class = PasswordResetForm 

từ nội django.contrib.auth.forms.PasswordResetForm-allauth.account.forms.ResetPasswordForm

Hãy chắc chắn để thêm dòng sau vào thiết lập của bạn:

REST_AUTH_SERIALIZERS = { 
    'PASSWORD_RESET_SERIALIZER':'path.to.PasswordResetSerializer' 
} 
Các vấn đề liên quan