有人知道在django allauth中使用社交帐户时如何绕过注册页面吗?
我有与Google合作的身份验证方面,但当用户接受来自Google的请求时,它会重定向到一个页面,要求他们在登录前输入他们的电子邮件地址。
但肯定会从Google登录信息中检索到这些信息,并且应该只需将用户登录即可使用该网站?
我将如何做到这一点?
感谢。
答案 0 :(得分:1)
这是一个有很多观点的老问题,但是我今天也遇到了同样的问题,并认为我会分享我的解决方案。
解决此问题的关键是遵循django-allauth“高级用法”文档,以及自定义重定向提供的示例: https://django-allauth.readthedocs.io/en/latest/advanced.html#custom-redirects
除了在这种情况下,您需要配置的是settings.py中的子类DefaultSocialAccountAdapter的SOCIALACCOUNT_ADAPTER,该类将覆盖“ pre_social_login”方法,例如:
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
from django.conf import settings
from django.contrib.auth import get_user_model
User = get_user_model()
class CustomSocialAccountAdapter(DefaultSocialAccountAdapter):
"""
Override the DefaultSocialAccountAdapter from allauth in order to associate
the social account with a matching User automatically, skipping the email
confirm form and existing email error
"""
def pre_social_login(self, request, sociallogin):
user = User.objects.filter(email=sociallogin.user.email).first()
if user and not sociallogin.is_existing:
sociallogin.connect(request, user)
'pre_social_login'的文档记录不是很好,但是在源代码中有一个文档字符串,可以帮助您: https://github.com/pennersr/django-allauth/blob/master/allauth/socialaccount/adapter.py
答案 1 :(得分:0)
您需要明确定义电子邮件'您在SOCIALACCOUNT_PROVIDERS设置中的谷歌范围
'google': { 'SCOPE': ['https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/userinfo.email'],
'AUTH_PARAMS': { 'access_type': 'online' },
}