Axios: bitbucket.org рдкрд░ 400 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдирд╡ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: axios/axios

node: 8.9.0
axios: 0.16.2
  • рдСрде рд╣реЗрдбрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдбрдЬ рдкрд░ рдПрдХреНрд╕рд┐рдУрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдмрд┐рдЯрдмрдХреЗрдЯ рдореБрдЭреЗ 400 рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред
  • рдХрд░реНрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЖрдкрдиреЗ CORS рдкреЛрд╕реНрдЯ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░-рдХреЗрдВрджреНрд░рд┐рдд рдЪрд░реНрдЪрд╛ рдХреЛ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐:

  1. рдмрд┐рдЯрдмрдХреЗрдЯ рдЕрдиреНрдп рдбреЛрдореЗрди рд╕реЗ рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
  2. рдореИрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
    axios
      .post(`https://bitbucket.org/site/oauth2/access_token`, {
        auth: {
          username: process.env.BITBUCKET_CLIENT_ID,
          password: process.env.BITBUCKET_CLIENT_SECRET
        },
        { grant_type: 'access_token' }
      })
      .then(response => {

        log('oauth.auth.response', response.data);
        const {
          access_token,
          refresh_token,
          token_type,
          scopes,
          expires_in
        } = response.data;
      });
...
$ curl -u $BITBUCKET_CLIENT_ID:$BITBUCKET_CLIENT_SECRET \
 https://bitbucket.org/site/oauth2/access_token \
-d grant_type=client_credentials

{"access_token": "magically-correct-response=", "scopes": "webhook repository team accou
nt", "expires_in": 3600, "refresh_token": "maigcally-correct-resfresh-token", "token_type": "bearer"}

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

axios рдХреЗ рдмрдЬрд╛рдп рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП require('request'); рд╕реНрд╡рд┐рдЪ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ред

  require('request')
      .post(`https://bitbucket.org/site/oauth2/access_token`, {
        auth: {
          username: process.env.BITBUCKET_CLIENT_ID,
          password: process.env.BITBUCKET_CLIENT_SECRET
        },
        form: { grant_type: 'access_token' }
      }, (err, response, body) => {
        const data = JSON.parse(body);
        log('oauth.auth.response', data);
        const {
          access_token,
          refresh_token,
          token_type,
          scopes,
          expires_in
        } = data;
      });

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

axios рдХреЗ рдмрдЬрд╛рдп рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП require('request'); рд╕реНрд╡рд┐рдЪ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ред

  require('request')
      .post(`https://bitbucket.org/site/oauth2/access_token`, {
        auth: {
          username: process.env.BITBUCKET_CLIENT_ID,
          password: process.env.BITBUCKET_CLIENT_SECRET
        },
        form: { grant_type: 'access_token' }
      }, (err, response, body) => {
        const data = JSON.parse(body);
        log('oauth.auth.response', data);
        const {
          access_token,
          refresh_token,
          token_type,
          scopes,
          expires_in
        } = data;
      });

рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдХреНрд╖реАрдп рдореБрджреНрджрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ axios рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рд╛:

import axios from 'axios';
import * as qs from 'querystring';

export const Callback = async (req, res): Promise<void | never> => {
  const {
    BITBUCKET_CLIENT_ID,
    BITBUCKET_CLIENT_SECRET,
    BITBUCKET_CALLBACK_URL
  } = process.env;

  const { code: AUTH_CODE } = req.query;

  try {
    const data = await axios({
      url: 'https://bitbucket.org/site/oauth2/access_token',
      headers: {
        'Cache-Control': 'no-cache',
        'content-type': `application/x-www-form-urlencoded`,
      },
      auth: {
        username: BITBUCKET_CLIENT_ID,
        password: BITBUCKET_CLIENT_SECRET,
      },
      method: 'post',
      data: qs.stringify({
        grant_type: 'authorization_code',
        code: AUTH_CODE,
        redirect_uri: BITBUCKET_CALLBACK_URL,
      }),
    });

    // Do something

  } catch (e) {
    console.trace(error);
    return res.sendStatus(400);
  }
};

рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдХреНрд╖реАрдп рдореБрджреНрджрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ axios рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рд╛:

import axios from 'axios';
import * as qs from 'querystring';

export const Callback = async (req, res): Promise<void | never> => {
  const {
    BITBUCKET_CLIENT_ID,
    BITBUCKET_CLIENT_SECRET,
    BITBUCKET_CALLBACK_URL
  } = process.env;

  const { code: AUTH_CODE } = req.query;

  try {
    const data = await axios({
      url: 'https://bitbucket.org/site/oauth2/access_token',
      headers: {
        'Cache-Control': 'no-cache',
        'content-type': `application/x-www-form-urlencoded`,
      },
      auth: {
        username: BITBUCKET_CLIENT_ID,
        password: BITBUCKET_CLIENT_SECRET,
      },
      method: 'post',
      data: qs.stringify({
        grant_type: 'authorization_code',
        code: AUTH_CODE,
        redirect_uri: BITBUCKET_CALLBACK_URL,
      }),
    });

    // Do something

  } catch (e) {
    console.trace(error);
    return res.sendStatus(400);
  }
};

рд╢реБрдХреНрд░рд┐рдпрд╛!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

varmeh picture varmeh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jdpagley picture jdpagley  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

StefH picture StefH  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Adman picture Adman  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Baoyx007 picture Baoyx007  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ