Django rest social auth custom PIPELINES не работает вообще
Я создал социальный аутентификатор с facebook и google, и они работают просто отлично. Однако, когда я регистрирую пользователя классическим способом django signup, я отправляю ему письмо, чтобы подтвердить его аккаунт, а затем устанавливаю user.is_email_verified
в True. Таким образом, не имеет смысла просить пользователя подтвердить свой email, если он регистрируется через social auth, и мне нужно установить is_email_verified==True
в пользовательском конвейере.
- Проблема: функция
handle_social_auth
вообще не работает. Я также установил функцию print, чтобы проверить, работает ли она с консоли.
#settings.py
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
}
SOCIALACCOUNT_PROVIDERS = {
'facebook': {
'METHOD': 'oauth2',
'SDK_URL': '//connect.facebook.net/{locale}/sdk.js',
'SCOPE': ['email', 'public_profile'],
'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
'INIT_PARAMS': {'cookie': True},
'FIELDS': [
'id',
'email',
'first_name',
'last_name',
'middle_name',
'name',
'name_format',
'picture',
],
'EXCHANGE_TOKEN': True,
'LOCALE_FUNC': lambda request: 'en_US',
'VERIFIED_EMAIL': False,
'VERSION': 'v7.0',
'APP': {
'client_id': env.str('FACEBOOK_CLIENT_ID', ''),
'secret': env.str("FACEBOOK_SECRET", '')
}
},
'google': {
'SCOPE': [
'profile',
'email',
],
'AUTH_PARAMS': {
'access_type': 'online',
},
'APP': {
'client_id': env.str('GOOGLE_CLIENT_ID', ''),
'secret': env.str("GOOGLE_SECRET", '')
}
},
"apple": {
"APP": {
"client_id": env.str('APPLE_CLIENT_ID', ''),
"secret": os.environ.get('APPLE_KEY_ID', ''),
"key": os.environ.get('APPLE_KEY_ID', ''),
"certificate": SOCIAL_AUTH_APPLE_PRIVATE_KEY,
},
}
}
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',
'social_core.pipeline.user.get_username',
'social_core.pipeline.user.create_user',
'home.pipeline.handle_social_auth',
'social_core.pipeline.social_auth.associate_user',
'social_core.pipeline.social_auth.load_extra_data',
'social_core.pipeline.user.user_details',
)
#pipeline.py
from django.conf import settings
from django.shortcuts import redirect
import django
from icecream import ic
from users.models import User
django.setup()
def handle_social_auth(backend, user, response, *args, **kwargs):
user.is_email_verified = True
user.save()
print('it is working..................................')