Вы можете создать родительскую ассоциацию так, чтобы SiteUser
был родителем FoursquareAuth
и HunchAuth
.
Когда пользователь сначала входит в систему с Foursquare, вы создаете модель SiteUser
, а затем создаете модель FoursquareAuth
с parent=just_created_user
. Затем, когда вы отправляете пользователя для аутентификации посредством догадки, вы включаете идентификатор пользователя или идентификатор сеанса в параметр обратного вызова. Когда происходит обратный вызов, вы получаете ключ пользователя и создаете HunchAuth
с parent=previously_created_user
.
Модель SiteUser
содержит объединенную информацию из обоих источников (имя, местоположение, последняя регистрация и т. Д.). Модели *Auth
содержат только те гарантированные уникальные идентификаторы, которые предоставляются каждым поставщиком (user_id, access_token и т. Д.).
Таким образом, если у вас есть пользовательский объект, вы можете найти данные аутентификации Foursquare или Hunch (используя фильтр предков), и вы можете найти пользователя, загрузив любую модель *Auth
и выбрав ее parent()
.
(примечание: я вызываю модель SiteUser
, чтобы не путать ее с объектом User
, доступным в App Engine)