Xero SDK - OAuth реализация параметра состояния - PullRequest
1 голос
/ 30 января 2020

В настоящее время я реализовал API NodeJs, express с пакетом xero-node sdk, и я столкнулся с проблемой, когда кажется, что параметр состояния OAuth не используется (хотя я видите, он определен как необязательный параметр для конструктора XeroClient:

export interface IXeroClientConfig {
  clientId: string,
  clientSecret: string,
  redirectUris: string[],
  scopes: string[],
  state?: string
}

Может кто-нибудь подтвердить, реализовано ли это еще?

Я предполагаю, что это будет работать так:

const xero = new XeroClient({
  clientId: xeroParams.clientId,
  clientSecret: xeroParams.clientSecret,
  redirectUris: [xeroParams.redirectUrl],
  scopes: xeroParams.scopes.split(' '),
  state: this.callback_state,
});

//then when building the consent url like this, the state param would be included
const consentUrl = await xero.buildConsentUrl();

А потом, когда сработал обратный вызов, я ожидал, что смогу получить доступ к state code в качестве одного из параметров запроса. Я видел возвращаемый параметр session_state, но он не соответствует коду состояния, который я предоставил.

1 Ответ

1 голос
/ 30 января 2020

Вот как вы проходите состояние через поток OAuth, используя xero-node SDK:

https://github.com/SerKnight/xero-node-basic-app/blob/master/index.js#L37

Пример:

  • сначала сгенерируйте grantUrl, затем добавьте свои пользовательские параметры.
app.get('/connect', async function(req, res) {
  try {
    let consentUrl = await xero.buildConsentUrl();
    res.redirect(consentUrl + "&state=THIS_IS_A_STANDARD_OAUTH_2_STATE_PARAMETER"); // Append any type of state/params you would like
  } catch (err) {
    res.send("Sorry, something went wrong");
  }
})

...

app.get('/callback', async function(req, res) {
  let url = redirectUri + req.originalUrl;

  console.log('req.query: ', req.query) // this will the the same state/params you passed to the API

  // ...do api stuff..
  // ref: https://github.com/XeroAPI/xero-node-oauth2-app

  res.send(req.query);
})

https://github.com/SerKnight/xero-node-basic-app/blob/master/index.js#L37

Стоит отмечая, что необязательный параметр state: XeroClient зарезервирован для материала openidclient. Не используйте его. просто добавьте его к URL-адресу согласия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...