PSA с Django, работает как и ожидался очевидные, и тревожных изменения пользователей, кроме:python social auth и Django - существует ли связь между пользователями OAuth и пользователями Django 1: 1?
Во время обработки трубопровода Twitter OAuth, наша система в первых отчетах ожидаемого Twitter username
/uid
(соответствие «ID» и «screen_name» , см. ниже 38200000). Но затем на каком-то этапе (social.pipeline.user.get_username
?) Функция конвейера сообщает пользователю, который кажется довольно удивительным, пользовательский объект, который, кажется, не представляет пользователя Twitter, а является пользователем Google. (См. (2, "person.1")
в таблице «auth_user» ниже).
Правомерно предположить, что объект пользователя, который производится во время обработки запроса OAuth не производится непосредственно формируют «social_auth_usersocialauth» резервная копия класса модели, но в конечном счете, от «AUTH_USER» при поддержке одного (через внешний ключ)? Как связаны таблицы при создании пользователей? Поиск кишечники ПСА, я нашел этот
return cls.objects.select_related('user').get(provider=provider,
uid=uid)
в social.apps.django_app.default.models.UserSocialAuth
. В соответствии с приведенными ниже таблицами, я предполагаю, что это может означать: "social_auth_usersocialauth"."user_id"
является неуникальным внешним ключом, PSA находит (2, «person.1») в "auth_user"
ниже. Поэтому мы получаем пользовательский объект для провайдера Google, а не Twitter.
sqlite> SELECT id, user_id, provider, uid FROM social_auth_usersocialauth
;
1|2|google-oauth2|[email protected]
2|3|google-oauth2|[email protected]
3|2|twitter|382000000
sqlite> SELECT id, username, email FROM auth_user
;
1|foo-bar|[email protected]
2|person.1|[email protected]
3|fst.lst|[email protected]
Обратите внимание, что 2
происходит дважды в user_id
столбце первой таблицы.
Если отношение (пользователь OAuth): (пользователь Django) является не 1: 1 по умолчанию, есть ли способ сделать это 1: 1? Или наши таблицы становятся поврежденными или некоторые из них? (PSA 0.2.12)
Мы теперь нашли способ узнать, какая социальная учетная запись была использована (например, в конвейере). Вы имеете в виду, что не имеет смысла делать отношения 1: 1 на стороне PSA (o.K.) или вообще? Является ли выбор PSA 1: N документированным? Я только нашел «Несколько социальных учетных записей _can_ быть связанными с одним пользователем». в [README.rst] (https://github.com/omab/python-social-auth/blob/master/README.rst) – B98