django allauth电子邮件注册 - 自定义逻辑

时间:2017-07-13 11:58:40

标签: django django-allauth

我在我的网站上使用django 1.10和django-allauth进行身份验证。

对于电子邮件/密码(即非社交)登录,我希望能够放置代码来检查电子邮件 - 以便我拒绝从某些众所周知的垃圾邮件域注册。

所以我想要合并这样的逻辑:

BANNED_DOMAINS = ('foobar.com', 'foo.biz', 'example.')

def email_has_banned_domain(email):
    found = False
    for x in BANNED_DOMAINS:
        if x in email:
            found = True
            break

    return found

然后,我如何将这个简单的功能合并到allautrh工作流程中,以防止被禁域中的单挑?

1 个答案:

答案 0 :(得分:1)

自定义allauth流的常用方法是定义自定义Adapter。文档没有列出所有钩子,但是看一下源代码会显示一个clean_email()方法,它可以做你想要的。

  

验证电子邮件值。如果您想(动态)限制可以选择的电子邮件地址,可以挂钩。

这样的事情应该有效:

from allauth.account.adapter import DefaultAccountAdapter

class MyAdapter(DefaultAccountAdapter):

    def clean_email(self, email):
        email = super().clean_email(email)
        if email_has_banned_domain(email):
            raise forms.ValidationError("Your domain is bad.")

        return email