No meu aplicativo de reação, estou usando axios para executar as solicitações da API REST.
Mas não é possível enviar o cabeçalho de autorização com a solicitação.
Aqui está o meu código:
tokenPayload() {
let config = {
headers: {
'Authorization': 'Bearer ' + validToken()
}
}
Axios.post(
'http://localhost:8000/api/v1/get_token_payloads',
config
)
.then( ( response ) => {
console.log( response )
} )
.catch()
}
Aqui, o validToken()
método simplesmente retornaria o token do armazenamento do navegador.
Todas as solicitações estão tendo uma resposta de 500 erros dizendo que
O token não pôde ser analisado a partir da solicitação
do back-end.
Como enviar o cabeçalho de autorização com cada solicitação? Você recomendaria qualquer outro módulo com react?
axios
problema. verifique o seuvalidToken()
funcionamento, ele está retornando algo que o seu servidor não entende.Respostas:
O primeiro parâmetro é o URL.
O segundo é o corpo JSON que será enviado junto com sua solicitação.
O terceiro parâmetro são os cabeçalhos (entre outras coisas). Que é JSON também.
fonte
Bearer
deve ser usado com B maiúsculo, não é?Esta é uma maneira única de definir o token de autorização em axios. Definir a configuração para cada chamada do axios não é uma boa ideia e você pode alterar o token de autorização padrão:
Editar , graças a Jason Norwood-Young.
Algumas APIs exigem que o portador seja escrito como Portador, então você pode fazer:
Agora você não precisa definir a configuração para cada chamada de API. Agora o token de autorização é definido para cada chamada axios.
fonte
Bearer
precisa ser capitalizado para algumas APIs (descobri da maneira mais difícil).O segundo parâmetro de
axios.post
édata
(nãoconfig
).config
é o terceiro parâmetro. Consulte isso para obter detalhes: https://github.com/mzabriskie/axios#axiosposturl-data-configfonte
Você pode criar uma configuração uma vez e usá-la em qualquer lugar.
fonte
headers: {'Authorization': 'Bearer '+token}
const instance = (token) => axios.create({ baseURL: `${config.API_URL}`, timeout: 1000, headers :{ 'authorization': 'Bearer ' + token } })
Usando o interceptor Axios:
fonte
Se você quiser alguns dados depois de passar o token no cabeçalho, tente este código
fonte
Isso funciona e eu preciso definir o token apenas uma vez em
app.js
:Então, posso fazer solicitações em meus componentes sem definir o cabeçalho novamente.
"axios": "^0.19.0",
fonte
axios
por si só vem com dois "métodos" úteis,interceptors
que não são nada além de middlewares entre a solicitação e a resposta. então, se em cada solicitação você deseja enviar o token. Use ointerceptor.request
.Eu fiz um pacote que ajuda você:
Agora você pode usar axios como classe
Quero dizer, a implementação do
middleware
depende de você, ou se você preferir criar seu próprioaxios-es6-class
https://medium.com/@enetoOlveda/how-to-use-axios-typescript-like-a-pro-7c882f71e34a , é o meio postar de onde veiofonte
Isso é o que eu também enfrentei. O token que você está passando não está correto.
Apenas codifique o token e passe, você obterá a resposta correta. Mas se o token não for passado em aspas simples '', ele certamente falhará. Deve estar no formato 'Authorization': 'Bearer YzE5ZTdiMjVlYzM5NjA2MGJkZTM5NjVlOTQ5YMmQ5ZjMwYjA0YmEzZmZjN2I1MmI4MDJkNQ', onde após o Bearer um espaço deve estar presente, também está presente entre aspas simples.
IMP: O código acima funcionará, mas se você postar algo como:
'Autorização': 'Portador' + YzE5ZTdiMjVlYzM5NjA2MGJkZTM5NjVlOTQ5YMmQ5ZjMwYjA0YmEzZmZjN2I1MmI4MDJkNQ, irá falhar
ou ----- o código abaixo também falhará, espero que você entenda a diferença básica
fonte