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

时间:2018-12-28 19:29:40

标签: django email django-rest-auth

我正在使用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/工作正常,我可以登录并查看服务器返回的令牌。

非常感谢任何想法!

1 个答案:

答案 0 :(得分:0)

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