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