使用HTTP GET请求验证Django All_auth / rest_auth电子邮件地址

时间:2019-07-06 15:27:36

标签: django python-2.7 django-allauth django-rest-auth

我将 Django all_auth rest_auth 用于 mobile 应用程序的后端服务。 我集成了注册和登录API,并且一切正常。

现在,我必须集成电子邮件地址验证逻辑。

注册后(无社交),我必须发送一封电子邮件,其中包含用户将用来验证您的帐户的链接。

我将此配置添加到了 Django 设置中:

ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
SOCIALACCOUNT_EMAIL_VERIFICATION = 'none'

这也很好。注册新帐户后,我就能收到电子邮件。在收到的电子邮件中,我还具有用于验证帐户的链接。

当用户只需单击链接时,我希望对电子邮件进行验证。

因此,我只想使用 GET HTTP 方法。

我根据文档中的建议添加了此设置:

ACCOUNT_CONFIRM_EMAIL_ON_GET = True

我使用链接到all_auth视图的URL。

from allauth.account.views import ConfirmEmailView
url(r'^account-confirm-email/', ConfirmEmailView.as_view(), name='account_email_verification_sent'),
url(r'^account-confirm-email/(?P<key>[-:\w]+)/$', ConfirmEmailView.as_view(), name='account_confirm_email'),

但是,如果我尝试单击收到邮件中的链接,则会收到此错误:

KeyError at /account-confirm-email/NzU:1hjl8A:z5Riy8Bjv_h0zJQtoYKuTkKvRLk/
'key'

/allauth/account/views.py in get
            self.object = self.get_object() ...
▶ Local vars
/allauth/account/views.py in get_object
        key = self.kwargs['key'] ...
▶ Local vars

这表明设置不足以使电子邮件验证可以与GET方法一起使用。

为此我要覆盖自定义Django视图吗?

1 个答案:

答案 0 :(得分:0)

看起来您两次使用同一视图,而您应该使用另一个视图类。进行以下更改可以解决该问题:

from allauth.account.views import ConfirmEmailView, EmailVerificationSentView

# ...

url(
    r'^account-confirm-email/',
    EmailVerificationSentView.as_view(),  # This is changed
    name='account_email_verification_sent',
),
url(
    r'^account-confirm-email/(?P<key>[-:\w]+)/$',
    ConfirmEmailView.as_view(),
    name='account_confirm_email',
),

# ...