我正在使用我的公司帐户(“Google for works”帐户)实施Google oauth2.0登录我的django应用程序。
“settings.py”中的管道如下所示:
SOCIAL_AUTH_PIPELINE = [
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.associate_by_email',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
]
向pipepline添加条件后端。
if config.GCPAuthentication.AUTO_CREATE_ACCOUNTS:
SOCIAL_AUTH_PIPELINE.extend([
'social.pipeline.user.get_username',
'social.pipeline.user.create_user'
])
尝试使用新用户首次登录时,我收到错误消息: / complete / google-oauth2 /上的AttributeError:'NoneType'对象没有属性'provider'
有趣的是,用户正在创建并保存在数据库中,并且在下次登录尝试时,它允许我登录。
此处抛出错误:https://github.com/omab/python-social-auth/blob/master/social/actions.py#L70
我的公司Google帐户可能没有任何与之关联的社交帐户(已停用Google+)/相关信息。这是一个问题吗?
在任何情况下,您能否告诉我解决此问题的任何解决方法?
答案 0 :(得分:2)
管道期望遵循需要调用函数的顺序。 对我的解决方案,正确的顺序应该是:
{{1}}
答案 1 :(得分:1)
是的你是对的,管道中的函数序列在这里很重要,因为一个函数的返回将被输入到管道中的下一个函数。
答案 2 :(得分:0)
作为旁注,我想补充说,当我通过更改主要密钥来更新USER
模型时,我遇到了类似的问题。在这种情况下,仅运行新USER
模型的迁移是不够的。您还必须为社交身份验证运行迁移。我是通过完整的&强制迁移整个项目。
答案 3 :(得分:0)
我有同样的错误来自本地数据库损坏。我必须清理表:social_auth_usersocialauth
和django_session
。