使用allauth绕过注册表单

时间:2014-01-07 23:54:20

标签: django django-allauth

有人知道在django allauth中使用社交帐户时如何绕过注册页面吗?

我有与Google合作的身份验证方面,但当用户接受来自Google的请求时,它会重定向到一个页面,要求他们在登录前输入他们的电子邮件地址。

但肯定会从Google登录信息中检索到这些信息,并且应该只需将用户登录即可使用该网站?

我将如何做到这一点?

感谢。

2 个答案:

答案 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' },
}