Django PasswordResetView не работает должным образом с именем app_name, вызывая DisallowedRedirect
Я столкнулся с проблемой, связанной со встроенной в Django функцией сброса пароля в моем проекте. В частности, у меня есть приложение с именем 'user', и я определил переменную app_name в моем urls.py как app_name = 'user'. Однако это, похоже, вызывает проблемы с представлениями сброса пароля в Django.
Изначально я столкнулся с ошибкой "Reverse for 'url name' not found" при использовании auth_views.PasswordResetView. Чтобы решить эту проблему, я попробовал установить параметр success_url в 'user:password_reset_done' и указать пользовательское имя шаблона электронной почты.
Однако теперь я столкнулся с новой проблемой, когда при попытке получить доступ к функциональности сброса пароля отладчик поднимает исключение DisallowedRedirect с сообщением "Unsafe redirect to URL with protocol 'user'". Это происходит во время выполнения django.contrib.auth.views.PasswordResetView. Ошибка выглядит следующим образом:
Unsafe redirect to URL with protocol 'user'
Request Method: POST
Request URL: http://127.0.0.1:8000/accounts/reset_password/
Django Version: 5.0.2
Exception Type: DisallowedRedirect
Exception Value:
Unsafe redirect to URL with protocol 'user'
Raised during: django.contrib.auth.views.PasswordResetView
Вот краткое описание моей установки:
urls.py (внутри приложения 'user'):
from django.urls import path
from django.contrib.auth import views as auth_views
app_name = 'user'
urlpatterns = [
path('reset_password/', auth_views.PasswordResetView.as_view(template_name='registration/reset_password.html',
success_url='user:password_reset_done',
email_template_name='registration/password_reset_email.html'),
name="reset_password"),
path('reset_password_sent/', auth_views.PasswordResetDoneView.as_view(template_name='registration/password_reset_done.html'),
name='password_reset_done'),
path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(),
name='password_reset_confirm'),
path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view(),
name='password_reset_complete')
]
registration/reset_password.html:
{% block content %}
<h1>Password reset</h1>
<p>Forgotten your password? Enter your email address below, and we’ll email instructions for setting a new one.</p>
<form method="post">
{% csrf_token %}
{{ form.as_div }}
<input type="submit" id="reset_password" value="Reset my password">
</form>
{% endblock content %}
registration/password_reset_done.html:
{% block content %}
<h1>Password reset sent</h1>
<p>We've emailed you instructions for setting your password.</p>
{% endblock content %}
registration/password_reset_email.html:
Someone asked for a password reset for email {{ email }}. Follow the link below:
{{ protocol }}://{{ domain }}{% url 'user:password_reset_confirm' uidb64=uid token=token %}
Я пробовал различные подходы, но не смог решить эту проблему, я просмотрел Stack Overflow в поисках потенциальных решений, но, к сожалению, ни одно из них не дало желаемого результата. Любые идеи или предложения о том, как решить эту проблему, будут очень признательны. Спасибо!