Проблема социального входа в Django allauth
Я реализую социальный логин с помощью Facebook и LINE, но столкнулся с парой проблем:
Проблема с входом в систему Facebook: После нажатия кнопки входа в Facebook и ввода пароля для входа в систему поток, по идее, должен на этом закончиться. Однако меня перенаправляют на страницу ввода электронной почты, и даже после ввода электронной почты я получаю ошибку: "Не удалось создать уникальное имя пользователя". Проблема с входом в систему LINE: Вход в систему LINE работает, но когда я проверяю панель администратора, поле электронной почты в разделе учетной записи пустует. Однако в учетной записи социального входа поле электронной почты существует. Может ли кто-нибудь помочь мне понять, почему возникают эти проблемы и как их решить? Любое руководство будет очень признательно!
# users/adapters.py
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
from allauth.account.utils import user_email
from django.utils.crypto import get_random_string
from .models import User
class CustomSocialAccountAdapter(DefaultSocialAccountAdapter):
def populate_user(self, request, sociallogin, data):
user = super().populate_user(request, sociallogin, data)
email = user_email(user)
if email:
user.username = email
else:
provider = sociallogin.account.provider
uid = sociallogin.account.uid
user.username = f"{provider}_{uid}"
while User.objects.filter(username=user.username).exists():
user.username = f"{user.username[:25]}_{get_random_string(5)}"
return user
# settings/base.py
ACCOUNT_EMAIL_VERIFICATION = 'none'
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_USER_MODEL_USERNAME_FIELD = 'username'
ACCOUNT_ADAPTER = 'allauth.account.adapter.DefaultAccountAdapter'
SOCIALACCOUNT_ADAPTER = 'users.adapters.CustomSocialAccountAdapter'
import uuid
SOCIALACCOUNT_PROVIDERS = {
'facebook': {
'METHOD': 'oauth2',
'SCOPE': ['email', 'public_profile'],
'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
'INIT_PARAMS': {'cookie': True},
'FIELDS': ['id', 'email', 'name'],
'EXCHANGE_TOKEN': True,
'LOCALE_FUNC': lambda request: 'ja_JP',
'VERIFIED_EMAIL': False,
'VERSION': 'v13.0',
},
'line': {
'SCOPE': ['profile', 'openid', 'email'],
'AUTH_PARAMS': {'nonce': lambda: uuid.uuid4().hex},
'LOCALE_FUNC': lambda request: 'ja_JP',
'VERIFIED_EMAIL': False,
'VERSION': 'v2.1',
},
}
LOGIN_URL = '/users/login/'
ACCOUNT_LOGIN_URL = '/users/login/'
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'