Получение: - Ошибка получения токенов: 400 Ошибка клиента: неверный запрос URL-адреса: https://myanimelist.net/v1/oauth2Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Получение: - Ошибка получения токенов: 400 Ошибка клиента: неверный запрос URL-адреса: https://myanimelist.net/v1/oauth2

Сообщение Anonymous »

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

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

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/')

# Prepare credentials and payload for token exchange
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',
'client_id': settings.MAL_CLIENT_ID,
'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}")
return redirect('/error/')

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

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

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

username = user_info_json.get('name')
if not username:
return redirect('/error/')

# Create or get user and external user records
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 ... -url-https
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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