我有一个Web应用程序,该应用程序在客户端使用Angular7
,在CakePHP
使用Api
我使用的是Basic Authentication
,然后将其替换为Token Authentication
,所有请求都可以正常工作,只是一个请求仅在Postman
中可以正常工作,但在浏览器中却很奇怪,因为似乎认证存在问题,但是不知道原因。
请求应返回一个blob以下载文件,因此我在FPDI
中使用CakePHP
返回pdf
这是邮递员的要求
邮递员标题
Date →Wed, 15 May 2019 12:02:44 GMT
Server →Apache/2.4.33 (Win32) OpenSSL/1.0.2n PHP/5.6.35
X-Powered-By →PHP/5.6.35
Content-Disposition →inline; filename="doc.pdf"
Cache-Control →private, max-age=0, must-revalidate
Pragma →public
Access-Control-Allow-Origin →*
Keep-Alive →timeout=5, max=100
Connection →Keep-Alive
Transfer-Encoding →chunked
Content-Type →application/pdf
邮递员尸体 在Chrome上请求 使用基本身份验证的工作请求 使用FireFox
通话请求
getWorkListPdf(id: number, cem_id?: number) {
let uri = `${this.workSessionsUrl}workList/${id}`;
let params = new HttpParams();
if (cem_id) {
params = params.set('cemetery_id', cem_id.toString());
}
const Auth = localStorage.getItem("AuthenticationToken");
let header = new HttpHeaders();
header = header.append("AuthenticationToken", Auth);
return this.dataService.get(uri,{ headers: header, params: params, responseType: 'arraybuffer' })
.pipe(
map(res => {
return res;
}
)
);
}
非常感谢您的帮助!
答案 0 :(得分:7)
问题是Api
无法识别包含身份验证所需标头信息的请求,我在Authentication
中添加了AppController
数组以允许同时使用{{1} }和Basic Auth
,当收到Token Auth
请求时,此请求适用于除此请求之外的所有请求(下载pdf)
我尝试添加
json
再次在Controller中运行,效果很好!!看来它现在可以识别令牌并返回有效文件!
答案 1 :(得分:1)
如果我完全理解您想要使用承载令牌而不是基本授权进行身份验证。如果需要基本的信息,可以在请求中使用以下标头:
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Basic ' + btoa('username:password')
})
};
对于持票人授权,可以执行以下操作:
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + JSON.parse(your token)
})
};
希望有帮助!
答案 2 :(得分:1)
在您的请求中添加 withCredentials true。
const httpOptions = {
headers: new HttpHeaders({
'Accept': "application/json",
'Content-Type': "text/plain;charset=UTF-8",
'Authorization': 'Bearer ' + JSON.parse(your token)
}), withCredentials: true
};