django-allauth: связывание нескольких социальных аккаунтов с одним пользователем

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

Может кто-нибудь объяснить, как связать социальные учетные записи вместе?

Я видел этот пост:Как мне подключить несколько провайдеров социальной аутентификации к одному и тому же пользователю django, используя django-allauth? который, кажется, возлагает ответственность на пользователя, чтобы войти сначала с одной социальной учетной записью, а затем связать другие учетные записи для себя.

Конечно, должен быть способ сделать это, не обременяя пользователя? Может по адресам электронной почты?

Есть ли способ сделать это по факту с существующими пользователями?

 elssar01 дек. 2013 г., 18:43
Вы можете попробовать автоматическое связывание, если адрес электронной почты обеих социальных учетных записей одинаков. Я ответил на аналогичный вопрос, который может оказаться полезным.stackoverflow.com/a/19443127/805427

Ответы на вопрос(2)

должен быть способ сделать это, не обременяя пользователя? Может по адресам электронной почты?

Будьте очень, очень осторожны в том, как вы это делаете. Возможно, вы открываете огромную дыру в безопасности. Если вы неt возложить некоторое бремя на пользователя и просто автоматически связывать учетные записи с тем же адресом электронной почты, который вы вводите, используя следующий вектор атаки:

Найти пользователя на вашем сайте, выяснить его адрес электронной почты (часто это очень просто)Создайте учетную запись на одном из ваших провайдеров с моей электронной почтойПодтвердите адрес электронной почты, добавьте его адрес электронной почты, удалите мой (достаточно, чтобы один из ваших провайдеров не выполнил полный угловой анализ, чтобы открыть эту дыру) 'Зарегистрироваться' к вашим услугам с моей новой учетной записью lax-провайдераПолучите автоматическое соответствие первоначальному пользователю, получите доступ к его аккаунту

Вы можете предпринять шаги, чтобы уменьшить этот риск, но даже если все поставщики сейчас требуют подтверждения по электронной почте, любая ошибка в сторонних командах откроет эту дыру в вашей безопасности.

Может быть за то, что тыВы рискуете, просто будьте осторожны. Немного бремени на пользователя, вероятно, не самое плохое.

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

 neves14 окт. 2013 г., 06:33
Хорошо, это может быть проблема безопасности, но вы нене отвечаю на вопрос.
 neves24 сент. 2014 г., 22:51
Не начинать пламенную войну здесь. Ваши соображения безопасности разумны, но безопасность - это компромисс. Если моя третья сторона просто Google и Facebook, а мой сайт нет банковского счета, может быть, я могу обменять безопасность для лучшего удобства использования.
 Denis22 апр. 2017 г., 14:17
Пожалуйста, прочитайте вопрос, прежде чем писать один и тот же рейв везде, у пользователя уже есть django 'с учетной записью, о каких проблемах безопасности вы говорите?
 Ted22 сент. 2014 г., 21:09
@ neves I 'м возражаю против рассмотрения вопроса. Это ответ, но не тот, который вам нужен. "Ты не должен правильный ответ более чем в 99% случаев, когда вопросКак мне отрезать руку?

яуспешно подключили другую учетную запись с помощью тегаprovider_login_url и установка атрибутаprocess="connect", Вот фрагмент кода для вставки в блок, отображаемый дляаутентифицированные пользователи:

{% load socialaccount %}
<p><a href="{% provider_login_url " facebook"="" process="connect" %}"="">Connect a facebook account</a></p>
<p><a href="{% 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, Для меня было бы достаточно автоматически связать логины и большое улучшение юзабилити.

Ваш ответ на вопрос