Иногда, когда пользователь регистрируется со своей учетной записью 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'}}