我正在用React和Redux构建一个前端应用程序,我正在使用axios来执行我的请求。我想访问响应头中的所有字段。在我的浏览器中,我可以检查标题,我可以看到我需要的所有字段都是存在的(如令牌,uid等…),但当我调用
const request = axios.post(`${ROOT_URL}/auth/sign_in`, props);
request.then((response)=>{
console.log(response.headers);
});
我只是
Object {content-type: "application/json; charset=utf-8", cache-control: "max-age=0, private, must-revalidate"}
这里我的浏览器网络选项卡,正如你可以看到的所有其他领域都存在。
最好成绩。
在这次谈话中还有一个暗示。
asp.net core 3.1
首先添加一个键,你需要把它放在头部,就像这样:
Response.Headers.Add("your-key-to-use-it-axios", "your-value");
在你定义cors策略的地方(通常是在Startup.cs中),你应该像这样将这个键添加到WithExposedHeaders中。
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder
.AllowAnyHeader()
.AllowAnyMethod()
.AllowAnyOrigin()
.WithExposedHeaders("your-key-to-use-it-axios"));
});
}
你可以在这里添加所有的键。
现在,在您的客户端,您可以通过使用响应结果轻松地访问“使用它的密钥”。
localStorage.setItem("your-key", response.headers["your-key-to-use-it-axios"]);
你可以在所有客户端使用它,像这样访问它:
const jwt = localStorage.getItem("your-key")
如果你使用的是没有Django -cors-headers的Django,你可以编写自定义中间件。
class CustomCorsMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response['Access-Control-Expose-Headers'] = 'MY-HEADER, ANOTHER-HEADER'
return response
您也可以在这里设置其他CORS头。
然后,您应该通过在项目的settings.py文件的中间件列表的开头插入它来注册您的中间件。
MIDDLEWARE = [
'myapp.middleware.CustomCorsMiddleware',
...
]