#django-rest-framework #django-allauth #django-rest-auth #django-rest-knox #dj-rest-auth
Вопрос:
Я могу успешно войти в систему, используя электронную почту и пароль, но когда я пытаюсь использовать социальную аутентификацию в сочетании с django allauth, django-rest-knox и dj rest auth, я получаю следующую ошибку при попытке сгенерировать токен:
raise type(exc)(msg)
AttributeError: Got AttributeError when attempting to get a value for field `token` on serializer `KnoxSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `tuple` instance.
Original exception text was: 'tuple' object has no attribute 'token'.
Вот мой views.py
from allauth.socialaccount.providers.facebook.views import FacebookOAuth2Adapter
from allauth.socialaccount.providers.google.views import GoogleOAuth2Adapter
from dj_rest_auth.registration.views import SocialLoginView
class FacebookLogin(SocialLoginView):
adapter_class = FacebookOAuth2Adapter
class GoogleLogin(SocialLoginView):
adapter_class = GoogleOAuth2Adapter
client_class = OAuth2Client
urls.py
from users.views import FacebookLogin, GoogleLogin
path('social-rest-auth/login/facebook/',
FacebookLogin.as_view(), name='fb_login'),
path('social-rest-auth/login/google/',
GoogleLogin.as_view(), name='google_login'),
serializers.py
class KnoxSerializer(serializers.Serializer):
"""
Serializer for Knox authentication.
"""
token = serializers.CharField()
user = UserSerializer(many=False, read_only=True)
settings.py
REST_AUTH_SERIALIZERS = {
'USER_DETAILS_SERIALIZER': 'users.serializers.UserSerializer',
'TOKEN_SERIALIZER': 'users.serializers.KnoxSerializer',
'PASSWORD_RESET_SERIALIZER': 'users.serializers.PasswordResetSerializer'
}
REST_FRAMEWORK = {
# 'DEFAULT_PERMISSION_CLASSES': (
# 'rest_framework.permissions.IsAuthenticated',
# ),
'EXCEPTION_HANDLER': 'users.exceptions.custom_exception_handler',
'DEFAULT_AUTHENTICATION_CLASSES': (
# 'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
# 'rest_framework.authentication.TokenAuthentication',
'knox.auth.TokenAuthentication',
)
}
Пожалуйста, кто-нибудь может мне помочь с этим?