DefaultSocialAccountAdapter 覆盖 pre_social_login
DefaultSocialAccountAdapter overrriding pre_social_login
我正在尝试在通过 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
当我登录时它工作正常(google 帐户已经存在于 Django 中)但是当第一次尝试 singup 时我有以下错误:
RelatedObjectDoesNotExist 在 /accounts/google/login/callback/
SocialAccount 没有用户。
任何智慧将不胜感激。
谢谢,
J
好的,下面的信号代码有一些进展:
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)
但仍需要采取一些措施来防止在不允许域时添加用户帐户。
要避免 "SocialAccount has no user" 错误,请尝试使用 sociallogin.user
而不是 sociallogin.account.user
。此外,您可能希望将电子邮件验证逻辑放在自定义适配器的 clean_email
方法中。
感谢@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
我正在尝试在通过 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
当我登录时它工作正常(google 帐户已经存在于 Django 中)但是当第一次尝试 singup 时我有以下错误:
RelatedObjectDoesNotExist 在 /accounts/google/login/callback/ SocialAccount 没有用户。
任何智慧将不胜感激。
谢谢,
J
好的,下面的信号代码有一些进展:
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)
但仍需要采取一些措施来防止在不允许域时添加用户帐户。
要避免 "SocialAccount has no user" 错误,请尝试使用 sociallogin.user
而不是 sociallogin.account.user
。此外,您可能希望将电子邮件验证逻辑放在自定义适配器的 clean_email
方法中。
感谢@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