Comment envoyer L'Auth de base avec axios

j'essaie d'implémenter le code suivant, mais quelque chose ne fonctionne pas. Voici le code:

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

il retourne une erreur 401. Quand je le fais avec Postman, il y a une option pour définir Basic Auth; si Je ne remplis pas ces champs, il retourne aussi 401, mais si je le fais, la requête est réussie.

avez-vous une idée de ce que je fais de mal?

Voici une partie des documents de L'API sur la façon d'implémenter ceci:

Ce service utilise des Les informations d'authentification dans l'en-tête pour établir une session utilisateur. Les justificatifs d'identité sont validés par rapport au serveur. L'utilisation de ce web-service créera une session avec les justificatifs d'identité passés et retournera un JSESSIONID. Ce JSESSIONID peut être utilisé dans les requêtes suivantes pour faire des appels de service web.*

24
demandé sur pillravi 2017-05-19 17:33:46

3 réponses

Il y a une "auth" paramètre pour l'Authentification Basique:

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

Source / Docs: https://github.com/mzabriskie/axios

28
répondu luschn 2017-05-29 09:54:26

la raison pour laquelle le code dans votre question ne s'authentifie pas est que vous envoyez l'auth dans l'objet data, pas dans la config, qui le mettra dans les en-têtes. Par le axios docs, le demande de la méthode aliaspost est:

axios.post(url [, [config]])

Donc, pour votre code fonctionne, vous devez envoyer un objet vide pour les données:

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

il en va de même pour l'utilisation du paramètre auth mentionné par @luschn. Le code suivant est équivalent, mais utilise le paramètre auth à la place (et passe aussi un objet de données vide):

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
répondu pillravi 2018-04-23 19:30:35

Un exemple (axios_example.js) en utilisant Axios dans le noeud.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);

assurez-vous que dans votre répertoire de projets vous faites:

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

vous pouvez alors tester le noeud.js RESTE de l'API à l'aide de votre navigateur: http://localhost:5000/search?queryStr=xxxxxxxxx

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

0
répondu Yuci 2018-05-21 12:17:12