我正在使用DRF作为API服务在Ionic 2中开发应用程序。出于身份验证的目的,我正在使用JWT。我正在发送带有Authorization: jwt [token]
的每个请求的身份验证令牌。在Postman中,API工作正常。
现在,当我在浏览器中测试它时,它无法正常工作,我发现它可能无法正常工作,因为JWT身份验证令牌没有作为飞行前的OPTIONS
请求发送。那么我该如何解决这个问题呢。
在CORS预检OPTIONS响应中,Cross-Origin-Allow-Headers应该与请求的匹配。
Cross-Origin-Allow-Headers: Authorization
在Ionic最新版本中,如果您使用的是ionic serve
命令,则必须使用Proxies来防止预检和CORS问题,
首先在ionic.config.json
文件中添加API路径和URL
{
"name": "APP-NAME",
"app_id": "",
"proxies": [
{
"path": "/api",
"proxyUrl": "http://example.com/api"
}
]
}
现在,在从http
调用您的API时,使用/api
URL而不是http://example.com/api
,
....
this.http.post('/api', data, {headers:headers}).map(res=>res.json()).subscribe(data=>{
console.log(data)
}, err=>{
console.log("Error!:", err.json());
});
....
完成上述更改后,您必须重新运行命令ionic serve
。
不过,如果你遇到问题,请参考Handling CORS Issues In Ionic和https://ionicframework.com/docs/cli/configuring.html
实际上问题是如果没有授权令牌,OPTIONS
api是不可读的,所以我们为readonly
和GET api添加了OPTIONS
Auth级别。