Drf use social auth with simple-jwt library AttributeError: Manager isn't available
I try to customize drf_social_oauth2 with drf simple-jwt
I use core.models instead of standard social_oauth2 models, but got 500 status code, error "AttributeError: Manager isn't available; 'oauth2_provider.Application' has been swapped for 'core.Application'"
My files: settings.py
INSTALLED_APPS = [
...
'oauth2_provider',
'social_django',
'drf_social_oauth2',
'apps.core',
...
]
...
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
'drf_social_oauth2.authentication.SocialAuthentication',
),
...
AUTHENTICATION_BACKENDS = {
'django.contrib.auth.backends.ModelBackend',
'drf_social_oauth2.backends.DjangoOAuth2',
'social_core.backends.google.GoogleOAuth2',
'social_core.backends.apple.AppleIdAuth',
}
CTIVATE_JWT = True
DRFSO2_URL_NAMESPACE = "drf"
OAUTH2_PROVIDER = {
"ACCESS_TOKEN_EXPIRE_SECONDS": 30 * 60,
"REFRESH_TOKEN_EXPIRE_SECONDS": 24 * 60 * 60,
"ACCESS_TOKEN_GENERATOR": "apps.core.oauth2_tokens_generators.generate_access_token",
"REFRESH_TOKEN_GENERATOR": "apps.core.oauth2_tokens_generators.generate_refresh_token",
}
OAUTH2_PROVIDER_APPLICATION_MODEL = "core.Application"
OAUTH2_PROVIDER_ACCESS_TOKEN_MODEL = "core.AccessToken"
OAUTH2_PROVIDER_REFRESH_TOKEN_MODEL = "core.RefreshToken"
OAUTH2_PROVIDER_ID_TOKEN_MODEL = "core.IDToken"
OAUTH2_PROVIDER_GRANT_MODEL = "core.Grant"
# GOOGLE OAUTH2 SETTINGS
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = config("SOCIAL_AUTH_GOOGLE_OAUTH2_KEY", default="")
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = config("SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET", default="")
SOCIAL_AUTH_APPLE_ID_CLIENT = config("SOCIAL_AUTH_APPLE_ID_CLIENT", default="")
SOCIAL_AUTH_APPLE_ID_TEAM = config("SOCIAL_AUTH_APPLE_ID_TEAM", default="")
SOCIAL_AUTH_APPLE_ID_KEY = config("SOCIAL_AUTH_APPLE_ID_KEY", default="")
SOCIAL_AUTH_APPLE_ID_SECRET = config("SOCIAL_AUTH_APPLE_ID_SECRET", default="")
core.models
"""
Module for defining OAuth2 models for token management.
"""
from django.db.models import CharField
from oauth2_provider import models
class Application(models.AbstractApplication):
"""
Customized OAuth2 Application model.
Inherits from `oauth2_provider.models.AbstractApplication`.
"""
class Grant(models.AbstractGrant):
"""
Customized OAuth2 Grant model.
Inherits from `oauth2_provider.models.AbstractGrant`.
"""
class AccessToken(models.AbstractAccessToken):
"""
Customized OAuth2 Access Token model.
Inherits from `oauth2_provider.models.AbstractAccessToken`.
Attributes:
token (str): The access token value.
"""
token = CharField(
max_length=2048,
unique=True,
db_index=True,
)
class RefreshToken(models.AbstractRefreshToken):
"""
Customized OAuth2 Refresh Token model.
Inherits from `oauth2_provider.models.AbstractRefreshToken`.
Attributes:
token (str): The refresh token value.
"""
token = CharField(max_length=2048)
class IDToken(models.AbstractIDToken):
"""
Customized OAuth2 ID Token model.
Inherits from `oauth2_provider.models.AbstractIDToken`.
"""
oauth2_tokens_generators.py
"""
Module to generate JWT tokens using SimpleJWT library.
This module provides functions to generate refresh and access tokens
using SimpleJWT library for authentication purposes.
"""
from rest_framework_simplejwt.tokens import RefreshToken as SimpleJWTRefreshToken
def generate_refresh_token(request):
"""
Generate a refresh token for the given user.
Parameters:
request (HttpRequest): The HTTP request object containing user information.
Returns:
str: The generated refresh token.
"""
refresh = SimpleJWTRefreshToken.for_user(request.user)
return str(refresh)
def generate_access_token(request):
"""
Generate an access token for the given user.
Parameters:
request (HttpRequest): The HTTP request object containing user information.
Returns:
str: The generated access token.
"""
refresh = SimpleJWTRefreshToken.for_user(request.user)
return str(refresh.access_token)
How cat I fix the error?