По какой-то причине Google oauth2 может зарегистрироваться на одного и того же пользователя с разными адресами электронной почты Gmail - PullRequest
0 голосов
/ 01 мая 2018

Иногда, когда пользователь регистрируется со своей учетной записью Gmail в моей службе, а затем он регистрируется со своей учетной записью G Suite, оба письма создают запись в модели UserSocialAuth, но для одного и того же пользователя django. Может кто-нибудь помочь мне понять, почему это происходит и как этого избежать? Мне нужно, чтобы обе учетные записи gmail имели отдельные учетные записи django.

Я использую social-auth-app-django https://github.com/python-social-auth/social-app-django

Мой трубопровод

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',

    # request consent if no refresh_token
    'contrib.pipelines.redirect_if_no_refresh_token',

    'social_core.pipeline.user.get_username',
    # http://python-social-auth.readthedocs.io/en/latest/use_cases.html#associate-users-by-email
    'social_core.pipeline.social_auth.associate_by_email',
    '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',

    'contrib.pipelines.get_avatar',
    # create default data for user
    'contrib.pipelines.dummy_data.create',
]

Вот как это выглядит в моей БД

In [7]: for uu in UserSocialAuth.objects.filter(user__email='me@mydomain.com').values():
   ...:     print(uu)
   ...:
{'user_id': 133, 'uid': 'me@mydomain.com', 'provider': 'google-oauth2', 'id': 125, 'extra_data': {'auth_time': 1523347209, 'access_token': '...', 'expires': 3600, 'token_type': 'Bearer', 'refresh_token': '...'}}
{'user_id': 133, 'uid': 'me@gmail.com', 'provider': 'google-oauth2', 'id': 401, 'extra_data': {'auth_time': 1522379769, 'access_token': '...', 'expires': 3598, 'token_type': 'Bearer'}}

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Получил ответ от самого @omab https://github.com/python-social-auth/social-core/issues/232

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

0 голосов
/ 04 мая 2018

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

Согласно документу:

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

Подробнее читайте здесь: http://python -social-auth.readthedocs.io / en / latest / use_cases.html # associate-users-by-email

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...