reactjs - 可以从一台服务器向另一台服务器发出请求 - “错误:请求失败,状态码 401”
问题描述
我正在尝试从一台服务器(localhost:3000)向另一台服务器(localhost:3001)创建 api req,但我收到身份验证错误 401。
注意:如果我对身份验证令牌进行硬编码,则可以发出请求。这让我得出结论,我没有以正确的方式设置 axios 身份验证标头。
apiFile.ts 文件
import axios, { AxiosInstance } from 'axios';
import { Dispatch } from 'redux';
import { handleResponse } from './handlers';
import { getDiscussionsAction } from '../../redux/actions/dataActions';
let axiosInstance: AxiosInstance = axios.create();
function addDiscussion(data:String) {
axiosInstance.post('http://localhost:3001/api/addDiscussion',data).then(response=> {
console.log(response)
}).catch(error=>{
console.log('error on adding post',error)
})
}
function setupAxiosInstance(token: string) {
console.log('inside setup Axios Instance')
console.log('token setup Axios',token)
axiosInstance = axios.create({
headers: {
Authorization: 'Bearer ' + token}
});
}
export default {
getDiscussions,
addDiscussion,
setupAxiosInstance
}
预期:当我 setupAxiosInstance(String) 并将令牌传递给它时,它应该为后续请求设置带有令牌的标头。
实际:虽然我可以看到 setupAxiosInstance(String) 方法已收到令牌,但在后续请求中(例如:AddDiscussion api req),它没有身份验证
[。当我在 -'let axiosInstance: AxiosInstance = axios.create();' 中对令牌进行硬编码时,它可以工作 喜欢
let axiosInstance: AxiosInstance = axios.create({
headers: {
Authorization: 'Bearer fjsdkf.sdjkfksfklsdjjksfshjdfhksndyrndbsjdjasbckcnbsdcb;efjdfnsdklncsncsln'}
});)
而且,如果我执行以下操作,它仍然无法正常工作。
function setupAxiosInstance(token: string) {
console.log('inside setup Axios Instance')
console.log('token setup Axios',token)
axiosInstance = axios.create({
headers: {
Authorization: 'Bearer ya29.Gl9uB4tmH0GzYyxBOmeICZa7vsNLZXPuj2du3Q4HIBMGQzZhixXWuS5mCNSPzkCzfjYK0-XNTM0bHI_Fmist9bjYU9CdD06ZtzHPs8TCHmAQcG1dryM8u9_LtfOHiaVGzA'}
});
}
如果有人能指出我做错了什么或指出我正确的方向?,那就太好了。
解决方案
您可以像这样设置实例标头,而不是重新分配实例
function setupAxiosInstance(token: string) {
console.log('inside setup Axios Instance')
console.log('token setup Axios',token)
axiosInstance.defaults.headers.common.Authorization = `Bearer ${token}`;
}
推荐阅读
- design-patterns - 编写正确的 DSL
- javascript - 如何根据下拉选择动态地重新措辞文本
- c++ - 如何使用模板元编程在 C++17 中将一种类型转换为另一种类型?
- python - 刮取数据而不重复已保存的数据
- css - css 响应式布局 - 如何避免第二行中的单个项目?
- google-cloud-dataflow - 在批处理管道中,如何为批处理源中的数据分配时间戳,例如 Beam 管道中的 csv 文件
- php - 如何在中间件之前运行 Laravel 路由约束?
- sql-server - 显示所有员工最近的分配
- laravel - 在“with”中查询模型
- python - 为什么我的 numpy 矩阵在被分配之前会更新?