Axios: 400 tanggapan ke bitbucket.org

Dibuat pada 3 Nov 2017  ·  3Komentar  ·  Sumber: axios/axios

node: 8.9.0
axios: 0.16.2
  • Menggunakan axios pada nodejs mengatur header auth, bitbucket memberi saya kesalahan 400.
  • Menggunakan permintaan yang sama dengan CURL berfungsi.

Anda telah mengunci diskusi yang sangat besar dan berpusat pada browser pada posting CORS ke server jarak jauh, namun:

  1. bitbucket memungkinkan panggilan dari domain lain
  2. saya tidak menggunakan browser untuk melakukan panggilan
    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"}

Komentar yang paling membantu

memperbaikinya dengan beralih ke require('request'); untuk permintaan api sisi server saya alih-alih axios.

  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;
      });

Semua 3 komentar

memperbaikinya dengan beralih ke require('request'); untuk permintaan api sisi server saya alih-alih axios.

  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;
      });

Karena ini adalah masalah axios, inilah cara saya menanganinya menggunakan 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);
  }
};

Karena ini adalah masalah axios, inilah cara saya menanganinya menggunakan 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);
  }
};

Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

ghprod picture ghprod  ·  3Komentar

Shu-Ji picture Shu-Ji  ·  3Komentar

ghost picture ghost  ·  3Komentar

altruisticsoftware picture altruisticsoftware  ·  3Komentar

reggi picture reggi  ·  3Komentar