我在我的网站上使用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工作流程中,以防止被禁域中的单挑?
答案 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