Встроенная в Django аутентификация для сброса пароля, ссылка для обрезки токена в URL - PullRequest
0 голосов
/ 16 января 2019

Я использую встроенную аутентификацию Django для отправки электронного письма для сброса пароля. Отправка электронного письма работает, но когда я пытаюсь перейти по ссылке на страницу, чтобы сбросить пароль, Django меняет URL-адрес (вроде как переадресация, я думаю), а затем пытается разрешить URL-адрес до 'http://127.0.0.1:8000/registration/USER_ID/set-password', вместо 'http://127.0.0.1:8000/registration/USER_ID/TOKEN'. Django затем выдает ошибку:' NoReverseMatch в / registration / reset / USER_ID / set-password / '

У меня нет файла с именем «set-password», и нигде в моем коде (шаблоны, URLconf) у меня нет «set-password».

urlpatterns = [

...
...

path('password_reset/', auth_views.PasswordResetView.as_view(),
  name='password_reset'),

path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(),      
  name='password_reset_done'),

path('reset/<uidb64>/<token>/', 
  auth_views.PasswordResetConfirmView.as_view(),    
  name='password_reset_confirm'),

path('reset/done', auth_views.PasswordResetCompleteView.as_view(), 
  name='password_reset_complete'),
]

Я использую код, найденный в документации (https://docs.djangoproject.com/en/2.1/topics/auth/default/#using-the-views), для сопоставления моего URL, поэтому я не создаю ничего нового. Похоже, Django удаляет токен из URL?

1 Ответ

0 голосов
/ 22 февраля 2019

Так что я разобрался с ответом, если у кого-нибудь еще в будущем возникнет такая же проблема. В шаблоне «password_reset_confirm» я установил действие формы на action="{% url 'password_reset_confirm' %}", из-за чего Django пытался создать этот URL при первоначальной загрузке страницы. Поскольку у «password_reset_confirm» есть параметры, я получил ошибку NoReverseMatch (потому что я не предоставлял никаких параметров в URL действия). Удаление action из формы решает проблему.

...