Авторизация через battle.net
Я пытаюсь создать авторизацию на своем сайте через battle.net. Это мой первый опыт работы с OAuth. Есть документация https://develop.battle.net/documentation/api-reference/oauth-api
Теперь я могу получить код и хочу получить токен доступа по коду. Предоставляю учетные данные. Используя Koa.js.
const { code } = ctx.query;
const redirect_uri = 'http://127.0.0.1:3000/auth';
const client_id = '0010d...25f44b31...5c34b12f4af7'
const secret = 'MY_VERY_SECRET_CODE';
const scope = 'wow.profile';
if( !code ) ctx.redirect(`https://us.battle.net/oauth/authorize?response_type=code&client_id=${client_id}&redirect_uri=${redirect_uri}&scope=${scope}`);
try {
const { data } = await axios.post('https://us.battle.net/oauth/token', {
grant_type: 'authorization_code',
code,
redirect_uri,
client_id
}, {
auth: {
username: client_id,
password: secret
}
})
console.log(data);
} catch (e) {
console.error(e)
}
ctx.body = {
message: 'OK',
}
Перенаправление работает, и я получил code
. Но как мне построить запрос с полученнымcode
? Но у меня ошибка
data:
{ error: 'invalid_request',
error_description: 'Missing grant type' } },
1 ответ
Решение
Я должен использовать тип данных формы.
formData.append('grant_type', 'authorization_code');
formData.append('code', code);
formData.append('redirect_uri', redirect_uri);
formData.append('client_id', client_id);
const { data: authData } = await axios.post('https://eu.battle.net/oauth/token',
formData,
{
auth: {
username: client_id,
password: secret,
},
headers: {
'Content-Type': `multipart/form-data; boundary=${formData._boundary}`,
}
},
)