Объединение аккаунтов с Google Login и обычной регистрацией

В моем проекте Django есть как обычная регистрация, так и вход через Google. Если пользователь регистрируется обычным образом и указывает свой email, а затем пытается войти в систему через Google, используя тот же email, появляется классический экран входа. Мне нужно следующее: Если пользователь сначала войдет в Google, а затем попытается войти в систему с той же электронной почтой через обычную регистрацию, или если он зарегистрируется в обычном режиме, а затем попытается войти в Google с той же электронной почтой, я хочу, чтобы оба метода вели к одному и тому же аккаунту. Другими словами, независимо от того, вошли ли они в систему с помощью Google или обычной регистрации, информация о пользователе должна быть объединена, и он должен получить доступ к одному и тому же аккаунту в обоих случаях.

Секции локального входа в settings.py:

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '<722444511487-2i7e9u3urlugcp2cp6slp09jjg7kgdg3.apps.googleusercontent.com>'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '<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>'
SOCIALACCOUNT_LOGIN_ON_GET=True
ACCOUNT_UNIQUE_EMAIL = True
EMAIL_VERIFICATION_METHOD = 'email'


# settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587 # TLS GENELLİKLE 587 PORTUNU KULLANIR SSL İSE GENELLİKLE 465 PORTUNU KULLANIR
EMAIL_USE_TLS = True  # TLS SSL'E GÖRE DAHA MODERN VE GÜVENLİDİR
EMAIL_HOST_USER = ''  
EMAIL_HOST_PASSWORD = ''  

views.py:

Я не мог ничего сделать для себя, я исследовал это, но не мог найти то, что искал.

Примечание: Я новичок на StackOverflow, пожалуйста, простите меня, если я допустил какую-либо ошибку, задавая свой вопрос.

Попробуйте войти в систему с помощью google и посмотрите, есть у него email или это поле пустое (user.email)?

И спрячьте свои секретные ключи, например, так:

project tree

root
--config
----settings.py 
.env

сначала вам нужно pip install python-dotenv

root/config/settings.py

import os
from dotenv import load_dotenv
    

load_dotenv()

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = os.environ.get("GOOGLE_KEY")
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = os.environ.get("GOOGLE_SECRET")

.env - имя файла обязательно, вы можете поместить его в корневой каталог или в другое удобное для вас место (в .env не нужно ставить кавычки, например GOOGLE_KEY=«YOUR_KEY»)

.env

GOOGLE_KEY=YOUR_KEY
GOOGLE_SECRET=YOUR_SECRET
Вернуться на верх