python-social-auth:/ complete / google-oauth2 /上的AttributeError:'NoneType'对象没有属性'provider'

时间:2016-08-11 06:41:06

标签: django python-2.7 google-oauth2 python-social-auth

我正在使用我的公司帐户(“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+)/相关信息。这是一个问题吗?

在任何情况下,您能否告诉我解决此问题的任何解决方法?

4 个答案:

答案 0 :(得分:2)

管道期望遵循需要调用函数的顺序。 对我的解决方案,正确的顺序应该是:

{{1}}

答案 1 :(得分:1)

是的你是对的,管道中的函数序列在这里很重要,因为一个函数的返回将被输入到管道中的下一个函数。

答案 2 :(得分:0)

作为旁注,我想补充说,当我通过更改主要密钥来更新USER模型时,我遇到了类似的问题。在这种情况下,仅运行新USER模型的迁移是不够的。您还必须为社交身份验证运行迁移。我是通过完整的&强制迁移整个项目。

答案 3 :(得分:0)

我有同样的错误来自本地数据库损坏。我必须清理表:social_auth_usersocialauthdjango_session