Python 社会授权。用户登录创建新用户而不是使用现有用户

Python Social Auth. User login creating new user instead of using existing one

我怀疑错误的原因,但我不知道如何解决,是这样发生的:

我在本地数据库上执行了 pg_dump,然后在 Heroku 上的生产数据库上执行了 pg_restore。现在,当已有用户名的人尝试登录(使用 facebook 或 google 等)时,PSA 会创建一个新用户,并在末尾附加一个随机数,而不是登录现有用户。

比如用户名为JohnSmith的用户用FB登录,因为JohnSmith已经存在于db中,所以创建一个用户名为 JohnSmit654f6b654

的新用户

我想我用来恢复数据库备份的 pg_restore 不知何故不包括一些重要的 psa 表。我想知道我应该手动恢复哪些 Python Social Auth 表,以便它正常工作。或者......也许错误的原因不同。感谢您的帮助。

顺便说一句,我在 Heroku 上使用 Django 1.8。

编辑

我的社交身份验证管道:

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.social_user',
    'social.pipeline.user.get_username',
    'social.pipeline.user.create_user',
    'social.pipeline.social_auth.associate_user',
    'social.pipeline.social_auth.load_extra_data',
    'social.pipeline.user.user_details',
    'letrasclub.utils.create_profile'
)

它是普通管道 + create_profile,最后一个管道只有在没有用户配置文件时才会为用户创建配置文件。它可能不是问题的根源,因为问题是管道正在创建新用户,这发生在 'social.pipeline.user.create_user'.

勾选social_auth_usersocialauthtable。它在社交网络用户 ID 和 Django 用户 ID 之间包含 link。

好的,Nikolay F 的回答对我有帮助,但这不是这个问题的答案。

这就是为我解决的问题,以防万一有人觉得它有用:

对旧数据库执行 manage.py dumpdata(它在社交身份验证表上有正确的数据,包括 social_auth_usersocialauth

 python manage.py dumpdata default > social.json

这里的技巧是要知道 Python Social Auth 没有应用标签,但该命令适用于 default

然后,将文件推送到 heroku 和 运行:

heroku run python manage.py loaddata social.json

那就解决了。