如何使用 django-rest-auth 和 Mailgun 从 Django 发送密码重置电子邮件

Posted

技术标签:

【中文标题】如何使用 django-rest-auth 和 Mailgun 从 Django 发送密码重置电子邮件【英文标题】:How to send password reset email from Django using django-rest-auth and Mailgun 【发布时间】:2019-05-26 13:38:51 【问题描述】:

我正在使用 Django rest auth 在 Django 中设置用户身份验证。大多数事情都运行良好,但我无法在虚拟后端或 Mailgun 中发送要发送的密码重置电子邮件。

我按照this tutorial 设置了基本身份验证。教程中的所有内容都很好用,但没有说明如何重置密码。

我有一个 Mailgun 帐户,我正在尝试使用沙盒发送邮件。

# api/urls.py
from django.urls import include, path

urlpatterns = [
    path('rest-auth/', include('rest_auth.urls')),
    path('rest-auth/registration/', include('rest_auth.registration.urls')),
    path('users/', include('users.urls')),
]

我正在通过可浏览的 API 表单为注册用户请求重置密码:http://127.0.0.1:8000/api/v1/rest-auth/password/reset/

我在表格中输入一个电子邮件地址,然后按“POST”。页面显示如下:

POST /api/v1/rest-auth/password/reset/
HTTP 200 OK
Allow: POST, OPTIONS
Content-Type: application/json
Vary: Accept


    "detail": "Password reset e-mail has been sent."

但是邮件没有发送!

mailgun 日志显示没有任何活动 - 没有发送电子邮件。

当我在浏览器中查看“网络”选项卡时,没有看到发布请求。

这是我使用 Mailgun 的设置:

EMAIL_HOST = 'smtp.mailgun.org'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'postmaster@sandboxxxxx.mailgun.org'
EMAIL_HOST_PASSWORD = 'xxxx'
EMAIL_USE_TLS = True

(我已经将我的真实沙箱和密码放在实际文件中)

首先,在 settings.py 中使用这个:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

我希望将电子邮件文本记录到使用 .'/manage.py runserver 运行服务器的终端。但是没有任何记录。

然后,在 settings.py 中使用这个:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

我希望 Mailgun 发送电子邮件。

我错过了什么明显的蠢事?

我认为 Django rest auth 包含一个默认的电子邮件模板,所以我不应该手动创建它吗?

我需要为http://127.0.0.1:8000/api/v1/rest-auth/password/reset/ 的管理页面做些额外的事情吗? http://127.0.0.1:8000/api/v1/rest-auth/login/ 工作正常,我可以登录并看到我的令牌从服务器返回。

非常感谢任何想法!

【问题讨论】:

您输入的电子邮件地址似乎不存在。 (是的,在这种情况下,响应仍然说发送了一封电子邮件。)您能否确认该电子邮件地址存在于用户模型和EmailAddress 模型中? 谢谢!但我认为问题在于 POST 请求甚至没有发送到服务器。我已经按照不同的说明从头开始重建了该应用程序几次,现在可以正常工作了。我认为为什么它以前不起作用将仍然是一个谜...... 【参考方案1】:

我对此没有很好的答案,但我放弃了使用 django-rest-auth 进行密码重置,而是改用 django-contrib-auth url 和模板。这与我的 React 前端不完全匹配,但至少它提供了用户功能。

【讨论】:

以上是关于如何使用 django-rest-auth 和 Mailgun 从 Django 发送密码重置电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Django-rest-auth和AWS - 错误401

当他从所有浏览器(Django-rest-auth,JWT)更改密码时如何注销用户?

django-rest-auth:使用 google 进行社交登录

Django-rest-auth Facebook 注册

使用django-rest-auth自带登录注册api

使用 django-rest-auth 和 allauth 进行 Google 身份验证