django-allauth: Свързване на множество социални акаунти към един потребител

При тестване на django-allauth, ако вляза и изляза с различни социални акаунти, те не изглеждат свързани заедно (в това, че не мога да получа достъп до тях, като гледам socialaccount_set.all.0, socialaccount_set.all.1 и т.н. ).

Може ли някой да обясни как да свържа социални акаунти?

Видях тази публикация: как да свържа множество доставчици на социални удостоверения към един и същ потребител на django с помощта на django-allauth? което изглежда задължава потребителя да влезе първо с един социален акаунт и след това да свърже другите акаунти За себе си.

Със сигурност трябва да има начин това да се направи, без да се прехвърля тежестта върху потребителя? Може би чрез имейл адреси?

Има ли начин да направите това след факта със съществуващите потребители?


person voisin    schedule 30.10.2012    source източник
comment
Може да имате опит за автоматично свързване, ако имейл адресът на двата социални акаунта е един и същ. Отговорих на подобен въпрос, който може да ви бъде полезен - stackoverflow.com/a/19443127/805427   -  person elssar    schedule 01.12.2013


Отговори (2)


Ако вашият потребител вече е влязъл, успешно свързах друг акаунт с помощта на маркера provider_login_url и настройка на атрибута process="connect". Ето кодовия фрагмент, който да поставите в блок, показван за удостоверени потребители:

{% load socialaccount %}
<p><a href="/bg{% provider_login_url "facebook" process="connect" %}">Connect a facebook account</a></p>
<p><a href="/bg{% provider_login_url "google" process="connect" %}">Connect a Google account</a></p>

Задайте SOCIALACCOUNT_QUERY_EMAIL=True и не забравяйте да поискате имейл в обхвата на вашите доставчици:

SOCIALACCOUNT_PROVIDERS = \
    {'facebook':
         {'SCOPE': ['email', ],
          'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
          'METHOD': 'oauth2',
          'LOCALE_FUNC': lambda request: 'pt_BR'},
     'google':
         {'SCOPE': ['https://www.googleapis.com/auth/userinfo.profile',
                    'email'],
          'AUTH_PARAMS': {'access_type': 'online'}
         },
}

Също така искам да знам дали е възможно автоматично да асоциирам акаунт с помощта на имейл адреса. Виждам в колоната „extra_data“ на таблицата socialaccount_socialaccount, че Google и Facebook изпращат "verified_email": true. За мен би било достатъчно автоматично да асоциирам влизанията и голямо подобрение на използваемостта.

person neves    schedule 14.10.2013

Със сигурност трябва да има начин това да се направи, без да се прехвърля тежестта върху потребителя? Може би чрез имейл адреси?

Бъдете много внимателни как правите това. Може да отваряте огромна дупка в сигурността. Ако не налагате някаква тежест на потребителя и просто свързвате автоматично акаунти със същия имейл адрес, въвеждате следния вектор на атака:

  • Намерете потребител на вашия сайт, разберете неговия имейл адрес (често това е много лесно)
  • Създайте акаунт при някой от вашите доставчици с моя имейл
  • Потвърдете имейла, добавете техния имейл, изтрийте моя (необходим е само един от вашите доставчици да не направи пълните ъглови случаи, за да се отвори тази дупка)
  • „Регистрирайте се“ за вашата услуга с моя нов акаунт за слаб доставчик
  • Автоматизирайте се до първоначалния потребител, получете достъп до неговия акаунт

Можете да предприемете стъпки, за да намалите този риск, но дори ако всички доставчици изискват потвърждение по имейл сега, всеки пропуск в екипите на трети страни ще отвори тази дупка във вашата сигурност.

Може би за това, което правите, рискът е оправдан, просто внимавайте. Малко тежест върху потребителя вероятно не е най-лошото нещо.

Виждал съм потоци, при които предлага автоматично съвпадение, след което ви пита за вашата парола или за повторно удостоверяване с един от първоначалните доставчици, за да добавите новия акаунт към вашия оригинален акаунт. Те не биха имали същия потенциал за експлоатиране, но имат някои ъглови случаи на ниво мозък и усложнения на потребителския интерфейс.

person Ted    schedule 15.12.2012
comment
Добре, може да е проблем със сигурността, но вие не отговаряте на въпроса. - person neves; 14.10.2013
comment
@neves Възразявам срещу разглеждането на въпроса. Това е отговор, но не този, който искате. Не трябва да е правилният отговор в повече от 99% от случаите, когато въпросът е Как да си отрежа ръката. - person Ted; 22.09.2014
comment
За да не започне пламъчна война тук. Вашите опасения за сигурността са основателни, но сигурността е компромис. Ако третата ми страна са само Google и Facebook и сайтът ми не е банкова сметка, може би мога да заменя сигурността за по-добра използваемост. - person neves; 25.09.2014
comment
Моля, прочетете въпроса, преди да пишете едно и също възторг навсякъде, потребителят вече има акаунт на django, за какви проблеми със сигурността говорите? - person Denis; 22.04.2017
comment
Това е проблем със сигурността само ако доставчикът е напълно ненадежден. Ако доставчикът на Oauth е Google или Microsoft, където само акаунтът ви в gmail (или приложенията на microsoft) е удостоверен от тях, дупката в сигурността, за която говорите, е силно надценена. Лекотата на използване има смисъл в редица случаи на употреба. - person Rohit; 19.05.2020