Jak mogę wysłać nagłówek uwierzytelniania z tokenem za pośrednictwem axios.js? Próbowałem kilku rzeczy bez powodzenia, na przykład:
const header = `Authorization: Bearer ${token}`;
return axios.get(URLConstants.USER_URL, { headers: { header } });
Daje mi ten błąd:
XMLHttpRequest cannot load http://localhost:8000/accounts/user/. Request header field header is not allowed by Access-Control-Allow-Headers in preflight response.
Udało mi się to uruchomić, ustawiając globalną wartość domyślną, ale domyślam się, że nie jest to najlepszy pomysł na pojedyncze żądanie:
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
Aktualizacja :
Odpowiedź Cole'a pomogła mi znaleźć problem. Używam oprogramowania pośredniczącego django-cors-headers, które już domyślnie obsługuje nagłówek autoryzacji.
Ale byłem w stanie zrozumieć komunikat o błędzie i naprawiłem błąd w moim kodzie żądania axios, który powinien wyglądać tak
return axios.get(URLConstants.USER_URL, { headers: { Authorization: `Bearer ${data.token}` } });
źródło
return axios.get(URLConstants.USER_URL, { headers: { Authorization: `Bearer ${data.token}` } });
Spróbuj tego :
axios.get( url, {headers: { "name" : "value" } } ) .then((response) => { var response = response.data; }, (error) => { var status = error.response.status } );
źródło
To zadziałało dla mnie:
let webApiUrl = 'example.com/getStuff'; let tokenStr = 'xxyyzz'; axios.get(webApiUrl, { headers: {"Authorization" : `Bearer ${tokenStr}`} });
źródło
Zamiast dodawać go do każdego żądania, możesz po prostu dodać go jako domyślną konfigurację.
axios.defaults.headers.common['Authorization'] = `Bearer ${access_token}`
źródło
Masz prawie rację, po prostu dostosuj swój kod w ten sposób
const headers = { Authorization: `Bearer ${token}` }; return axios.get(URLConstants.USER_URL, { headers });
zwróć uwagę, gdzie umieszczam backticks, dodałem '' po Bearer, możesz pominąć, jeśli na pewno będziesz obsługiwać po stronie serwera
źródło
-
między schematem autoryzacji a tokenem znajduje się spacja, a nie myślnik ( ). Nigdy nie widziałem, aby jakikolwiek serwer wymagał myślnika, jak pokazałeś, a większość, jeśli nie wszystkie, odsyłaby błąd, gdyby go podano.Zamiast wywoływać funkcję axios.get użyj:
axios({ method: 'get', url: 'your URL', headers: { Authorization: `Bearer ${token}` } })
źródło
Możesz tego spróbować.
axios.get( url, {headers: { "Access-Control-Allow-Origin" : "*", "Content-type": "Application/json", "Authorization": `Bearer ${your-token}` } } ) .then((response) => { var response = response.data; }, (error) => { var status = error.response.status } );
źródło
res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,OPTIONS,Accept,Authorization, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers');
ta zmiana rozwiązała mój problem, po prostu spróbuj!
źródło
Zainstaluj
cors
oprogramowanie pośredniczące. Próbowaliśmy rozwiązać ten problem własnym kodem, ale wszystkie próby zakończyły się niepowodzeniem.To sprawiło, że zadziałało:
cors = require('cors') app.use(cors());
Oryginalny link
źródło