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
那就解决了。
我怀疑错误的原因,但我不知道如何解决,是这样发生的:
我在本地数据库上执行了 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
那就解决了。