我怀疑错误的原因但我不知道如何解决它,这就是发生的事情:
我在本地数据库上执行了pg_dump
,然后在Heroku上的生产数据库上执行了pg_restore
。现在,当已经存在用户名的用户尝试登录时(使用Facebook或谷歌等),PSA会在末尾创建一个附加了随机数的新用户,而不是登录现有用户。
例如,用户名 JohnSmith 的用户使用FB登录,因为 JohnSmith 已经存在于数据库中,它会创建一个用户名为的新用户JohnSmit654f6b654
我猜我用来恢复数据库备份的pg_restore
某种方式并没有包含一些重要的psa表。我想知道我应该手动恢复哪些Python Social Auth表以使其正常工作。或者......也许错误有不同的原因。谢谢你的帮助。
顺便说一句,我在Heroku上使用Django 1.8。
修改
My Social Auth Pipeline:
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'
。
答案 0 :(得分:4)
检查 social_auth_usersocialauth 表。它包含社交网络用户ID和django用户ID之间的链接。
答案 1 :(得分:0)
好的,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
解决了它。