我正在尝试在登录前验证电子邮件地址或通过Google帐户进行单身验证。
我的代码如下:
from django.http import Http404
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
class MySocialAccountAdapter(DefaultSocialAccountAdapter):
def pre_social_login(self, request, sociallogin):
email_domain = sociallogin.account.user.email.split('@')[1].lower()
if email_domain == 'mysuperdomain.org':
print email_domain
pass
我登录时工作正常(Django中已存在谷歌帐户),但在第一次尝试单身时我的错误如下:
任何智慧都将受到最高的赞赏。
谢谢,
Ĵ
确定以下信号代码有一些进展:
from allauth.account.signals import user_signed_up
from django.http import Http404
from auth.settings import ALLOWED_DOMAIN
def email_allowed(user, **kwargs):
email_domain = user.email.split('@')[1].lower()
if not email_domain == ALLOWED_DOMAIN:
raise Http404
user_signed_up.connect(email_allowed)
但仍需要采取一些措施来防止在不允许使用域时添加用户帐户。
答案 0 :(得分:1)
要避免“SocialAccount没有用户”错误,请尝试使用sociallogin.user
代替sociallogin.account.user
。此外,您可能希望将电子邮件验证逻辑放在自定义适配器的clean_email
方法中。
答案 1 :(得分:0)
感谢您帮助@pennersr。
我最终得到了下面的代码:
class KcSocialAccountAdapter(DefaultSocialAccountAdapter):
def pre_social_login(self, request, sociallogin):
email_domain = sociallogin.user.email.split('@')[1].lower()
if not email_domain == ALLOWED_DOMAIN:
raise ImmediateHttpResponse(HttpResponse(sociallogin.user.email + ' is not valid memeber of ' +ALLOWED_DOMAIN))
else:
pass