Как мога да поддържам карта на потребители, удостоверени чрез социално удостоверяване

Опитвам се да вляза потребител през facebook. Използвах django-social-auth за същото. Интегрирах го успешно с моя тестов проект. Въпреки това не знам как да съпоставя потребител с django auth потребител. За да бъдем по-точни, кажете например, че удостоверявам потребител чрез facebook. След като сесията приключи, потребителят излиза. Когато потребителят се върне за втори път, отново през facebook, как да разбера, че това е същият потребител? Не мога да използвам потребителското име във facebook, защото потребителското име може да се промени! Не мога да използвам имейл ID на потребителя по очевидни причини. Какъв идентификатор от данните, изпратени от facebook, трябва да считам за уникален за конкретен потребител? Ключовете от отговора, изпратен от facebook, са следните

['username', 'bio', 'first_name', 'last_name', 'verified', 'name', 'locale', 'hometown', 'work', 'expires', 'sports', 'languages', 'quotes', 'link', 'location', 'gender', 'access_token', 'timezone', 'education', 'updated_time', 'id']

Въпреки това отговорът, който е най-очевиден за мен, е да се използва „id“ за идентифициране на потребителя, какви са шансовете facebook да премести всичките си данни на нови сървъри и полето „id“, свързано с потребителите, да се промени? Ако това се случи, това може да накара потребител с променен идентификатор да получи достъп до данните на друг потребител, ако получи същия идентификатор като предишния идентификатор на последния! Вероятно мога да използвам комбинация от „id“ и „username“, тъй като facebook ви позволява да промените потребителското име само веднъж. Но ако премахнат това ограничение, това ще наруши логиката ми. Аз съм напълно нов в OAuth2, така че моля да ме извините за невежеството ми, ако това звучи глупаво. Опитах се да проуча малко, но се изгубих в огромните уроци! Как обикновено хората се справят с това?

РЕДАКТИРАНЕ: Отговорите на въпроса, свързан като дубликат, не отговарят на въпроса ми как да се справя с промяната на ID от страна на Facebook. Въпреки че е рядък случай, възможността не може да бъде изключена, особено защото промяната ще се случи от страна на Facebook и аз нямам контрол върху нея. Нещо повече, дори не бих имал никакъв намек, когато се промени. И ако подобно нещо се случи, сигурността на потребителите на моето приложение ще бъде застрашена! Тъй като OAuth2 е вид стандарт, има ли някаква насока за уникалния идентификатор? Някаква насока пречи ли на доставчика да промени потребителския идентификатор?


person Atmaram Shetye    schedule 24.06.2013    source източник


Отговори (1)


Плъгинът Django socialauth прави всичко това. Ако си спомням правилно (от използването на това в един проект преди 3 години), тогава socialauth има свой собствен модел за обвързване на потребители с акаунти в други среди като facebook.

Когато го направих, използвах техния имейл адрес като този уникален ключ за обвързване на потребителя в моето приложение с потребителите във facebook или gmail.

Вижте този файл: https://github.com/omab/django-social-auth/blob/master/social_auth/db/django_models.py

Има модели за запазване на тези препратки.

Алън

person Odif Yltsaeb    schedule 24.06.2013
comment
Преминавайки през изходния код на django-social-auth, изглежда, че използва uid, предоставен от facebook, за да асоциира акаунти. Асоциирането на имейл адрес е деактивирано по подразбиране поради възможните опасни ефекти за сайтове, където поверителността на потребителите има значение. Въпросът ми е основно за това да направя асоциацията още по-сигурна и надеждна. ID е поле, предоставено от facebook. Което означава, че ако се използва за асоцииране на акаунти в моето приложение, това може да наруши сигурността и надеждността на асоциирането, когато facebook промени идентификаторите! - person Atmaram Shetye; 24.06.2013
comment
Искам поле(я), което е уникално за потребителя, но не зависи от трета страна като facebook. Може би искам невъзможното, но липсата на такова поле затруднява надеждността на асоциирането на акаунт! - person Atmaram Shetye; 24.06.2013