In meiner Reaktions-App verwende ich Axios , um die REST API-Anforderungen auszuführen.
Es ist jedoch nicht möglich, den Authorization Header mit der Anfrage zu senden.
Hier ist mein Code:
tokenPayload() {
let config = {
headers: {
'Authorization': 'Bearer ' + validToken()
}
}
Axios.post(
'http://localhost:8000/api/v1/get_token_payloads',
config
)
.then( ( response ) => {
console.log( response )
} )
.catch()
}
Hier würde die validToken()
-Methode einfach das Token aus dem Browserspeicher zurückgeben.
Alle Anfragen erhalten eine 500-Fehler-Antwort, die dies anzeigt
Das Token konnte nicht aus der Anforderung analysiert werden
vom Back-End.
Wie wird der Autorisierungsheader bei jeder Anfrage gesendet? Würden Sie ein anderes Modul empfehlen mit zu reagieren?
var config = {
headers: {'Authorization': "bearer " + token}
};
var bodyParameters = {
key: "value"
}
Axios.post(
'http://localhost:8000/api/v1/get_token_payloads',
bodyParameters,
config
).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
});
Der erste Parameter ist die URL.
Der zweite ist der JSON-Body, der zusammen mit Ihrer Anfrage gesendet wird.
Der dritte Parameter sind (unter anderem) die Überschriften. Welches ist JSON auch.
Hier finden Sie eine einzigartige Möglichkeit, das Autorisierungstoken in Axios festzulegen. Das Festlegen der Konfiguration für jeden Axios-Aufruf ist keine gute Idee. Sie können das Standardautorisierungstoken folgendermaßen ändern:
const axios = require('axios');
axios.defaults.baseURL = 'http://localhost:1010/'
axios.defaults.headers.common = {'Authorization': `bearer ${token}`}
export default axios;
Bearbeiten
Für einige APIs muss Bearer als Bearer geschrieben sein. Sie können also Folgendes tun:
axios.defaults.headers.common = {'Authorization': `Bearer ${token}`}
Jetzt müssen Sie nicht mehr für jeden API-Aufruf eine Konfiguration festlegen. Jetzt wird für jeden Axios-Aufruf ein Autorisierungstoken festgelegt.
Der zweite Parameter von axios.post
ist data
(nicht config
). config
ist der dritte Parameter. Weitere Informationen finden Sie hier: https://github.com/mzabriskie/axios#axiosposturl-data-config
Sie können die Konfiguration einmal erstellen und überall verwenden.
const instance = axios.create({
baseURL: 'https://some-domain.com/api/',
timeout: 1000,
headers: {'Authorization': 'Bearer '+token}
});
instance.get('/path')
.then(response => {
return response.data;
})
Mit Axios Interceptor:
const service = axios.create({
timeout: 20000 // request timeout
});
// request interceptor
service.interceptors.request.use(
config => {
// Do something before request is sent
config.headers["Authorization"] = "bearer " + getToken();
return config;
},
error => {
Promise.reject(error);
}
);
Wenn Sie nach der Übergabe des Tokens im Header einige Daten möchten, versuchen Sie diesen Code
const api = 'your api';
const token = JSON.parse(sessionStorage.getItem('data'));
const token = user.data.id; /*take only token and save in token variable*/
axios.get(api , { headers: {"Authorization" : `Bearer ${token}`} })
.then(res => {
console.log(res.data);
.catch((error) => {
console.log(error)
});
Dies funktioniert und ich muss den Token nur einmal in meinem app.js
Setzen:
axios.defaults.headers.common = {
'Authorization': 'Bearer ' + token
};
Dann kann ich Anfragen in meinen Komponenten stellen, ohne den Header erneut zu setzen.
"axios": "^0.19.0",