2015-08-26 3 views
0

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)

ответ

0

Есть две модели User(Django user) и User social auth, а соотношение 1: N означает, что каждый User может подключаться к нескольким социальным счетам. Поэтому нет смысла делать это 1: 1.

+0

Мы теперь нашли способ узнать, какая социальная учетная запись была использована (например, в конвейере). Вы имеете в виду, что не имеет смысла делать отношения 1: 1 на стороне PSA (o.K.) или вообще? Является ли выбор PSA 1: N документированным? Я только нашел «Несколько социальных учетных записей _can_ быть связанными с одним пользователем». в [README.rst] (https://github.com/omab/python-social-auth/blob/master/README.rst) – B98

Смежные вопросы