Python Social Auth. Логин пользователя, создающий нового пользователя вместо того, чтобы использовать существующего
Я подозреваю причину ошибки, но я не знаю, как ее решить, вот что произошло:
Я сделал pg_dump
в локальной базе данных, а затем pg_restore
в производственной базе данных на Heroku. Теперь, когда кто-то с уже существующим именем пользователя пытается войти в систему (используя Facebook, Google и т. Д.), PSA создает нового пользователя со случайным числом, добавленным в конце, вместо входа в систему существующего пользователя.
Например, пользователь с именем пользователя JohnSmith входит в систему с помощью FB, поскольку JohnSmith уже существует в базе данных, он создает нового пользователя с именем пользователя JohnSmit654f6b654.
Я думаю, pg_restore
Я использовал для восстановления резервной копии базы данных, как-то не включал некоторые важные таблицы psa. Я хотел бы знать, какие таблицы Python Social Auth я должен восстановить вручную, чтобы он работал правильно. Или... может быть, есть другая причина ошибки. Спасибо за вашу помощь.
Кстати, я использую Django 1.8 на Heroku.
редактировать
Мой 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'
,
2 ответа
Хорошо, Николай Ф ответ мне помог, но это не ответ на этот вопрос.
Это то, что решило это для меня, на случай, если кто-то найдет это полезным:
Сделать manage.py dumpdata
на старой базе данных (которая содержит правильные данные в социальных таблицах аутентификации, в том числе social_auth_usersocialauth
)
python manage.py dumpdata default > social.json
Хитрость заключается в том, чтобы знать, что Python Social Auth не имеет метки приложения, но команда работает с default
,
Затем отодвинул файл к героку и побежал:
heroku run python manage.py loaddata social.json
Это решило это.
Проверьте таблицу social_auth_usersocialauth. Он содержит ссылку между идентификатором пользователя социальной сети и идентификатором пользователя django.