Как динамически сгенерировать подпись для OAuth V 1.0 JavaScript / React - PullRequest
0 голосов
/ 10 марта 2020

Я бьюсь об этом весь день. Я мог бы действительно использовать некоторую помощь. Мне нужно сгенерировать подпись, которая соответствует правильно, чтобы отправить в мою форму через REST Wordpress API. Я создал интерфейс в React.

Я создал отдельный файл API. js, чтобы попытаться это сделать. Я проверил на Почтальоне, и это работает ... Я просто не знаю, что они делают, чтобы заставить его работать! Я пытался использовать oauth-подпись NPM безрезультатно.

import oauthSignature from 'oauth-signature'

const URL = 'http://localhost:8000/wp-json'
const FORMURL = 'gf/v2/forms'
const CUSTOMFORM = '/1/entries'

const httpMethod = 'POST'
const FULLURL = URL+FORMURL+CUSTOMFORM



const randomString = (stringLength) => {
    let charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz'
    let stringOutput = ''

    while (stringLength > 0) {
        let bytes = new Uint8Array(16);
        let random = window.crypto.getRandomValues(bytes);

        random.forEach(function(c) {
            if (stringLength === 0) {
                return;
            }
            if (c < charset.length) {
                stringOutput += charset[c];
                stringLength--;
            }
        });
    }
    return stringOutput;
}


const PARAMETERS = {
    oauth_consumer_key: CONSUMERKEY,
    oauth_nonce: randomString(11),
    oauth_timestamp: Math.floor(Date.now()/1000),
    oauth_signature_method: 'HMAC-SHA1',
    oauth_version: '1.0',
}

let ENCODEDSIGNATURE = oauthSignature.generate(httpMethod, URL+FORMURL, PARAMETERS, CONSUMERSECRET)
let SIGNATURE = oauthSignature.generate(httpMethod, FULLURL, PARAMETERS, CONSUMERSECRET, { encodeSignature: false })

var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", `OAuth oauth_consumer_key="${PARAMETERS.oauth_consumer_key}",oauth_signature_method="HMAC-SHA1",oauth_timestamp="${PARAMETERS.oauth_timestamp}",oauth_nonce="${PARAMETERS.oauth_nonce}",oauth_version="${PARAMETERS.oauth_version}",oauth_signature="${ENCODEDSIGNATURE}"`);

var raw = JSON.stringify({"3":"rod@test.com 3","5":"Store Name 5","6":"Store Address 6","7":"Account Number 7","4.3":"Roderick Cardenas 4.3"});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};
const postForm = () => {
  return fetch("http://localhost:8000/wp-json/gf/v2/forms/1/entries", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
}
'''
Any help would be appreciated, not sure I can get any on such a specific thing. I feel like it has to do with how the signature is created...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...