Cómo enviar Autorización básica con axios


Estoy tratando de implementar el siguiente código, pero algo no funciona. Aquí está el código:

  var session_url = 'http://api_address/api/session_endpoint';
  var username = 'user';
  var password = 'password';
  var credentials = btoa(username + ':' + password);
  var basicAuth = 'Basic ' + credentials;
  axios.post(session_url, {
    headers: { 'Authorization': + basicAuth }
  }).then(function(response) {
    console.log('Authenticated');
  }).catch(function(error) {
    console.log('Error on Authentication');
  });

Está devolviendo un error 401. Cuando lo hago con Postman hay una opción para establecer Autenticación Básica; si no lleno esos campos también devuelve 401, pero si lo hago, la solicitud es exitosa.

¿Alguna idea de lo que estoy haciendo mal?

Aquí está parte de los documentos de la API de cómo implementar esto:

Este servicio utiliza información básica de autenticación en el encabezado para establecer una sesión de usuario. Las credenciales se validan en el servidor. El uso de este servicio web creará una sesión con las credenciales de usuario pasadas y devolverá un JSESSIONID. Este JSESSIONID se puede utilizar en las solicitudes posteriores para realizar llamadas a servicios web.*

Author: pillravi, 2017-05-19

3 answers

Hay un parámetro "auth" para Auth Básico:

auth: {
    username: 'janedoe',
    password: 's00pers3cret'
}

Fuente / Documentos: https://github.com/mzabriskie/axios

 28
Author: luschn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-29 09:54:26

La razón por la que el código en su pregunta no se autentica es porque está enviando la autenticación en el objeto de datos, no en la configuración, que lo pondrá en las cabeceras. Para axios docs , el método de solicitud alias para post es:

Axios.post (url [, data [, config]])

Por lo tanto, para que su código funcione, debe enviar un objeto vacío para los datos:

var session_url = 'http://api_address/api/session_endpoint';
var username = 'user';
var password = 'password';
var basicAuth = 'Basic ' + btoa(username + ':' + password);
axios.post(session_url, {}, {
  headers: { 'Authorization': + basicAuth }
}).then(function(response) {
  console.log('Authenticated');
}).catch(function(error) {
  console.log('Error on Authentication');
});

Lo mismo es cierto para usar el parámetro auth mencionado por @luschn. El el siguiente código es equivalente, pero usa el parámetro auth en su lugar (y también pasa un objeto de datos vacío):

var session_url = 'http://api_address/api/session_endpoint';
var uname = 'user';
var pass = 'password';
axios.post(session_url, {}, {
  auth: {
    username: uname,
    password: pass
  }
}).then(function(response) {
  console.log('Authenticated');
}).catch(function(error) {
  console.log('Error on Authentication');
});
 9
Author: pillravi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-23 19:30:35

Un ejemplo (axios_example.js) usando Axios en Nodo.js:

const axios = require('axios');
const express = require('express');
const app = express();
const port = process.env.PORT || 5000;

app.get('/search', function(req, res) {
    let query = req.query.queryStr;
    let url = `https://your.service.org?query=${query}`;

    axios({
        method:'get',
        url,
        auth: {
            username: 'xxxxxxxxxxxxx',
            password: 'xxxxxxxxxxxxx'
        }
    })
    .then(function (response) {
        res.send(JSON.stringify(response.data));
    })
    .catch(function (error) {
        console.log(error);
    });
});

var server = app.listen(port);

Asegúrese de que en el directorio de su proyecto lo hace:

npm init
npm install express
npm install axios
node axios_example.js

Luego puede probar el nodo.js REST API usando su navegador en: http://localhost:5000/search?queryStr=xxxxxxxxx

Ref: https://github.com/axios/axios

 0
Author: Yuci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-21 12:17:12