DefaultSocialAccountAdapter覆盖pre_social_login

时间:2015-03-23 11:42:48

标签: django django-allauth

我正在尝试在登录前验证电子邮件地址或通过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中已存在谷歌帐户),但在第一次尝试单身时我的错误如下:

/ accounts / google / login / callback /中的RelatedObjectDoesNotExist SocialAccount没有用户。

任何智慧都将受到最高的赞赏。

谢谢,

Ĵ

确定以下信号代码有一些进展:

    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)

但仍需要采取一些措施来防止在不允许使用域时添加用户帐户。

2 个答案:

答案 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