【问题标题】:Django All_auth/rest_auth e-mail address validation using HTTP GET requestDjango Allauth/rest auth 使用 HTTP GET 请求验证电子邮件地址
【发布时间】:2019-07-06 15:27:36
【问题描述】:

我将 Django all_authrest_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 视图吗?

【问题讨论】:

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


    【解决方案1】:

    看起来您两次使用同一个视图,而您应该使用另一个视图类。以下更改应修复它:

    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',
    ),
    
    # ...
    

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 1970-01-01
      • 2020-12-22
      • 2020-02-28
      • 2019-06-25
      • 2020-02-21
      • 2017-09-20
      • 2014-04-23
      相关资源
      最近更新 更多