Получение: - Ошибка обмена кода на токен: valid_grant.Python

Программы на Python
Ответить
Anonymous
 Получение: - Ошибка обмена кода на токен: valid_grant.

Сообщение Anonymous »

Поэтому я пытался создать расширение с использованием API MyAnimeList для получения пользовательских данных и обратного вызова после авторизации пользователя. Кажется, возникла проблема с моим токеном доступа

Код: Выделить всё

def mal_callback(request):
code = request.GET.get('code')
code_verifier = request.session.get('code_verifier')

if not code or not code_verifier:
return redirect('/error/')

# Using Basic authentication scheme
credentials = f"{settings.MAL_CLIENT_ID}:{settings.MAL_CLIENT_SECRET}".encode('utf-8')
encoded_credentials = base64.b64encode(credentials).decode('utf-8')

token_data = {
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': settings.REDIRECT_URI,
'code_verifier': code_verifier,
}

try:
token_response = post(
'https://myanimelist.net/v1/oauth2/token',
headers={
'Authorization': f'Basic {encoded_credentials}',
'Content-Type': 'application/x-www-form-urlencoded'
},
data=token_data
)
token_response.raise_for_status()
token_response_json = token_response.json()
except Exception as e:
print(f"Error retrieving tokens: {e}")  # Better logging
return redirect('/error/')

if 'error' in token_response_json:
print(f"Token error: {token_response_json['error']}")  # Better error handling
return redirect('/error/')

access_token = token_response_json.get('access_token')
refresh_token = token_response_json.get('refresh_token')

try:
user_info_response = get(
'https://api.myanimelist.net/v2/users/@me',
headers={'Authorization': f'Bearer {access_token}'}
)
user_info_response.raise_for_status()
except Exception as e:
print(f"Error retrieving user info: {e}")  # Better logging
return redirect('/error/')

user_info_json = user_info_response.json()

if 'name' not in user_info_json:
return redirect('/error/')

username = user_info_json['name']

user, created = User.objects.get_or_create(username=username)

expires_in = token_response_json.get('expires_in')
expires_at = datetime.now() + timedelta(seconds=expires_in) if expires_in else None

external_user, _ = ExternalUser.objects.update_or_create(
user=user,
defaults={
'provider': 'MAL',
'access_token': access_token,
'refresh_token': refresh_token,
'token_expires_at': expires_at,
}
)

login(request, user)

return redirect('/')
Я перепроверил все значения переменных и констант, и все они кажутся правильными, я перепроверил их все несколько раз.
Изменить: когда я запустите этот код, я буду перенаправлен на «/error/», поскольку это то, что настроено, если возникает какая-либо ошибка, и я не перенаправляюсь на свой «/», как предполагалось

Подробнее здесь: https://stackoverflow.com/questions/791 ... alid-grant
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»