Django Password Reset Email отправляет неверную ссылку
Я использую систему логина и сброса пароля auth_views для приложения учетных записей в проекте Django. Функциональность сброса пароля отлично работает на локальном хосте. Однако после развертывания проекта при попытке сбросить пароль письмо, которое отправляется на зарегистрированный почтовый ящик пользователя, содержит неверный URL сброса. Доменная часть URL сброса содержит адрес localhost, а не домен сайта.
По электронной почте отправляется ссылка вида http://127.0.0.1:8000/accounts/reset/MTk/azifmz-484db716de96c7628427b41e587c1910/[![введите описание изображения здесь]1]1
Я ожидаю, что отправленное письмо будет содержать правильный URL возврата, специфичный для домена, который его отправляет. Например https://www.example.com/accounts/reset/MTk/azifmz-484db716de96c7628427b41e587c1910.
В settings.py
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = 'index'
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
SOCIALACCOUNT_PROVIDERS = {
'google': {
'SCOPE': [
'profile',
'email',
],
'AUTH_PARAMS': {
'access_type': 'online',
}
}
}
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST= 'smtp.gmail.com'
EMAIL_HOST_USER= 'myemail@gmail.com'
EMAIL_HOST_PASSWORD= 'mypassword'
EMAIL_USE_TLS= True
EMAIL_PORT= 587
В моем аккаунте urls.py я использую стандартные классифицированные базисные представления, предоставляемые django.contrib.auth. Нет никаких пользовательских представлений для рабочего процесса сброса. Я надеюсь настроить этот рабочий процесс, чтобы избежать необходимости писать пользовательские представления на данный момент. urls.py
path('password_reset/', auth_views.PasswordResetView.as_view(
template_name="accounts/password_reset_form.html", success_url="done/"), name="password_reset"),
path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(
template_name = "accounts/password_reset_done.html"), name="password_reset_done"),
path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(
template_name = "accounts/password_reset_confirm.html"), name="password_reset_confirm"),
path('reset/done/', auth_views.PasswordResetCompleteView.as_view(
template_name = "accounts/password_reset_complete.html"), name="password_reset_complete"),
Наконец, шаблон html также довольно стандартен :
<div class="jumbotron">
<form method="POST">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" class='btn btn-primary' value="Reset Password">
</form>
</div>
Как вы развертываете свой сайт. Если вы используете Ngnix в качестве обратного прокси, ваш запрос теперь идет с вашего собственного сервера (127.0.0.1), а не с вашего доменного имени. Вы можете добавить следующую строку в файл Nginx-config:
proxy_set_header Host yourdomain.com;
Это отправит ваш домен в запросе
Решено - В общем, в моей админке было зарегистрировано три сайта, pk1 = 127.0.0.0:8000, pk2 = example.com, и pk3 = mydomain.com, Просто убедитесь, что первый или лучше единственный в производстве является доменом, который вы хотите.