Объединение аккаунтов с 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