#node.js #wordpress #express #oauth-2.0 #jwt
#node.js #wordpress #выражать #oauth-2.0 #jwt
Вопрос:
Мы пытаемся связать наш веб-сайт с WordPresses API, используя OAuth 2.0. Надеясь, что клиент сможет пройти аутентификацию и опубликовать на WordPress с нашего сайта. Для этого нам нужно получить токен доступа.
Мы успешно подключились к WordPress, чтобы получить наш код доступа. Мы следили за API WordPress, и он работает для одного пользователя (с секретным ключом, а не с OAuth). Вещи, которые мы пробовали, — это добавление заголовков, изменение данных на разные имена примеры: параметры, тело
Это упрощенная версия кода, который мы использовали
const axios = require('axios');
axios({
method: "POST",
data: {
grant_type: 'authorization_code',
client_id: '12345',
client_secret: 'ABCABC1235412345',
code: 'Abc123',
redirect_uri: 'https://localhost:5000/wordpress/callback_wordpress'
},
url: 'https://public-api.wordpress.com/oauth2/token'
}).then( (response) => {
console.log(response);
}).catch( (error) => {
console.log(error);
});
Мы ожидаем получить токен доступа jwt, но вместо этого получаем эту ошибку 400:
data:
{ error: ‘invalid_client’,
error_description: ‘The required “client_id” parameter is missing.’ } } }
Кажется очевидным, что нам не хватает client_id
, однако мы включили его в наш запрос. Есть ли где-то еще, что нам нужно включить?
Ответ №1:
var authOptions = {
url: 'https://public-api.wordpress.com/oauth2/token',
form:
{
grant_type: 'authorization_code',
code: code,
client_id: client_id,
client_secret: client_secret,
redirect_uri: redirect_uri,
},
headers: {
'Authorization': 'Basic ' (Buffer.from(client_id ':' client_secret).toString('base64'))
},
json: true
};
Нам нужно было включить заголовок с этой информацией, и нам нужно было использовать переменную ‘form’ вместо ‘data’.