【问题标题】:Django Password Reset Email sending incorrect linkDjango密码重置电子邮件发送不正确的链接
【发布时间】:2022-01-19 20:09:19
【问题描述】:

我正在为 Django 项目中的帐户应用程序使用 auth_views 登录和密码重置系统。 密码重置功能在 localhost 上运行良好。但是,一旦在尝试重置密码时部署,发送到用户注册电子邮件帐户的电子邮件包含不正确的重置 URL。重置 URL 的域部分包含 localhost 地址,而不是站点的域。

电子邮件被发送到http://127.0.0.1:8000/accounts/reset/MTk/azifmz-484db716de96c7628427b41e587c1910/[![enter此处的图片描述]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>

【问题讨论】:

标签: django email return reset-password


【解决方案1】:

已解决 - 基本上,我的管理员中注册了三个网站: pk1 = 127.0.0.0:8000、pk2 = example.com 和 pk3 = mydomain.com。只需确保生产中的第一个,或者最好是唯一一个,就是您想要的域。

【讨论】:

    【解决方案2】:

    您如何部署您的网站。如果您使用 Ngnix 作为反向代理,您的请求现在来自您自己的服务器(127.0.0.1),而不是您的域名。您可以将下一行添加到您的 Nginx-config 文件中:

    proxy_set_header Host yourdomain.com;
    

    这将在请求中发送您的域

    【讨论】:

    • 谢谢,我已经通过 pythonanywhere.com 部署了它没有反向代理我在主机上创建虚拟环境并配置 wsgi
    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 2020-05-19
    • 2019-11-28
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    相关资源
    最近更新 更多