G
G
def mal_callback(request):
code = request.GET.get('code')
# Exchange the code for an access token
token_response = post(
'https://myanimelist.net/v1/oauth2/token',
data={
'client_id': settings.MAL_CLIENT_ID,
'client_secret': settings.MAL_CLIENT_SECRET,
'code': code,
'grant_type': 'authorization_code',
'redirect_uri': settings.REDIRECT_URI,
}
).json()
if 'access_token' not in token_response:
error_message = token_response.get('error', 'Unknown error')
logger.error("Error exchanging code for token: %s", error_message)
return redirect('/error/')
logger.error("Token response: %s", token_response)
access_token = token_response['access_token']
# Retrieve user information
user_info_response = get(
'https://api.myanimelist.net/v2/users/@me',
headers={'Authorization': f'Bearer {access_token}'}
).json()
# Log the user info response
# Make sure user_info_response is valid
if 'name' not in user_info_response:
# Handle error
error_message = user_info_response.get('error', 'Unknown error')
logger.error("Error retrieving user info: %s", error_message)
return redirect('/error/') # Redirect to an error page or handle as needed
username = user_info_response['name']
# Create or get the user
user, created = User.objects.get_or_create(username=username)
# Create or update the ExternalUser model
external_user, _ = ExternalUser.objects.update_or_create(
user=user,
defaults={
'provider': 'MAL',
'access_token': access_token,
'refresh_token': token_response.get('refresh_token'),
'token_expires_at': token_response.get('expires_at'),
}
)
# Log the user in
login(request, user)
return redirect('/')
Я перепроверил все значения переменных и констант, и все они кажутся правильными, я перепроверил их несколько раз, а также после многочисленных логирований и отладок я обнаружил, что ошибка, похоже, в ответе на токен и токене доступа