Django allauth перенаправление на маршрут регистрации для пользователя, который зарегистрировался с паролем и вошел с социальным логином
Я использовал Django allauth для аутентификации пользователей в своем приложении. Когда пользователь регистрируется в аккаунте google с помощью электронной почты и ручного пароля, а затем пытается войти в систему через google social login, Django allauth перенаправляет пользователя на маршрут accounts/social/signup/ и просит ввести адрес электронной почты, а после ввода адреса электронной почты сообщает пользователю, что адрес электронной почты уже существует! Я читал документацию и конфигурации allauth, но ничего не работает, вот мое подтверждение в settings.py:
ACCOUNT_AUTHENTICATION_METHOD = ('username_email')
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
####
SOCIALACCOUNT_AUTO_SIGNUP = True
SOCIALACCOUNT_EMAIL_VERIFICATION = "none"
SOCIALACCOUNT_EMAIL_REQUIRED = True
Любое предложение будет оценено по достоинству.
Я сделал свой, чтобы сделать что-то вроде "автоматической привязки существующего пользователя".
settings.py
SOCIALACCOUNT_ADAPTER = 'myapp.socauthadapter.MySocialAccountAdapter'
myapp/socauthadapter.py
from django.contrib.auth import get_user_model
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
from allauth.account.utils import perform_login
usermodel = get_user_model()
class MySocialAccountAdapter(DefaultSocialAccountAdapter):
def pre_social_login(self, request, sociallogin):
user = sociallogin.user
if user.id: #Already linked
return
try:
UserObj = usermodel.objects.get(email=user.email) # if user exists, connect the account to the existing account and login
sociallogin.state['process'] = 'connect'
perform_login(request, UserObj, 'none')
except usermodel.DoesNotExist:
pass
надеюсь, это поможет