повторяющаяся запись в социальной сети python

Я использую python-social-auth с django. Я хочу авторизоваться через facebook, но раньше я уже регистрировался по умолчанию (адрес электронной почты, пароль) с адресом электронной почты, который используется facebook. Могу ли я связать учетную запись facebook с зарегистрированной учетной записью? Я пытался поискать, но ничего


person streamride    schedule 17.02.2014    source источник


Ответы (1)


Проверьте Свяжите пользователей по электронной почте, это должно объяснить, как это сделать.

Свяжите пользователей по электронной почте

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

Например, если пользователь зарегистрировался со своей учетной записью Facebook, затем вышел из системы и в следующий раз попытается использовать Google OAuth2 для входа в систему, было бы неплохо (если на обоих социальных сайтах настроен один и тот же адрес электронной почты), чтобы пользователь попал в свой первоначальный учетная запись, созданная серверной частью Facebook.

Этот сценарий возможен при включении конвейерной функции associate_by_email, например:

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.auth_allowed',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.social_auth.associate_by_email',  # <--- enable this one
    'social_core.pipeline.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
)

Эта функция отключена по умолчанию, потому что автоматизировать этот процесс со всеми серверными ВМ не на 100%. Не все провайдеры будут проверять вашу учетную запись электронной почты, и другие пользователи могут этим воспользоваться.

Возьмем, к примеру, пользователя А, зарегистрированного на вашем сайте с адресом электронной почты [email protected]. Затем злоумышленник регистрируется у другого провайдера, который не проверяет его электронную почту с той же учетной записью. Наконец, этот пользователь обратится на ваш сайт (который поддерживает этого провайдера) и зарегистрируется на нем, поскольку адрес электронной почты тот же, злоумышленник получит контроль над учетной записью пользователя A.

РЕДАКТИРОВАТЬ: Ссылка на исправленные и скопированные детали документов в этот ответ.

person omab    schedule 18.02.2014
comment
вам нужно авторизоваться правильно? В противном случае он создаст новую учетную запись, и вы получите повторяющиеся адреса электронной почты, что вызовет исключение. - person un33k; 01.04.2014
comment
@ValNeekman, нет, ассоциация по электронной почте работает только для вышедших из системы пользователей. Исключение возникает, когда данный адрес электронной почты уже используется более чем одной учетной записью, поскольку PSA не знает, какой из них используется для связи. - person omab; 01.04.2014
comment
вы уверены? Я посмотрел на код для associate_by_email, он возвращает None для нулевого адреса электронной почты, вызывает исключение AuthException для нескольких писем и возвращает пользователя, если найдено ровно одно электронное письмо. В моем случае я регистрируюсь в Google, выхожу из системы, затем регистрируюсь в facebook, у которого есть моя учетная запись gmail, и бум, я получаю вторую учетную запись, созданную с тем же адресом электронной почты. Я перехватываю исключение AuthException, но в моем случае его нет. Когда пользователь вошел в систему, все работает правильно, но я хочу избежать дублирования записей электронной почты в моей БД, если не вошел в систему. Thx - person un33k; 01.04.2014
comment
Как определяется настройка вашего конвейера? associate_by_email не будет работать с вошедшими в систему пользователями (в основном потому, что слияние учетных записей пользователей сильно привязано к проекту), не вернет пользователя, если нет учетной записи с этим адресом электронной почты, он вызовет исключение, если более 1 учетной записи пользователя совместно используют тот же адрес электронной почты (потому что не какой выбрать, первый? второй? третий?). - person omab; 02.04.2014
comment
Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки. . Сайта больше нет, поэтому этот ответ почти пуст :( - person Nanne; 12.08.2017
comment
@Nanne, изменилось - person omab; 12.08.2017