Php 在邮递员中获得请求工作,但不';不能在浏览器中工作

Php 在邮递员中获得请求工作,但不';不能在浏览器中工作,php,angular,authentication,cakephp,postman,Php,Angular,Authentication,Cakephp,Postman,我有一个web应用程序,它在客户端使用Angular7,在Api 我使用的是基本身份验证,然后我用令牌身份验证替换它,所有请求都可以正常工作,除了一个只有在邮递员中才能正常工作的请求,但在浏览器中它很奇怪,因为它似乎存在身份验证问题,但不知道原因 请求应该返回一个blob来下载文件,因此我在CakePHP中使用FPDI来返回pdf 这是邮递员的要求 邮递员标题 Date →Wed, 15 May 2019 12:02:44 GMT Server →Apache/2.4.33 (Win32) Op

我有一个web应用程序,它在客户端使用
Angular7
,在
Api
我使用的是
基本身份验证
,然后我用
令牌身份验证
替换它,所有请求都可以正常工作,除了一个只有在
邮递员
中才能正常工作的请求,但在浏览器中它很奇怪,因为它似乎存在身份验证问题,但不知道原因

请求应该返回一个blob来下载文件,因此我在
CakePHP
中使用
FPDI
来返回
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;
                }
      )
    );
  }

非常感谢您的帮助

如果我完全理解,您希望使用承载令牌而不是基本授权进行身份验证。如果需要basic,可以在请求中使用以下标题:

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)
    })
};


希望有帮助

在您的请求中添加with credentialstrue

const httpOptions = {
    headers: new HttpHeaders({
        'Accept': "application/json",
        'Content-Type': "text/plain;charset=UTF-8",
        'Authorization': 'Bearer ' + JSON.parse(your token)
    }), withCredentials: true
};

问题是
Api
无法识别包含认证所需头信息的请求,我在
AppController
中添加了
Authentication
数组,以允许在接收
json
请求时同时使用
Basic Auth
Token Auth
,此工作适用于除此之外的所有请求(下载pdf) 我试着补充一下

$this->Auth->authenticate['Token'] = array(
                'fields' => array(
                ),
                // 'parameter' => '_token',
                'header' => 'AuthenticationToken',
                'scope' => array(
                    'User.permission_api_login' => true
                )
        );

再次在控制器中,它工作正常!!。似乎现在可以识别令牌并返回有效文件

请不要发布文本图像。复制文本并将其粘贴到此处,作为引用或代码(适合文本的任何内容)。@nkr我更新了帖子,但实际上我不能用代码/文本替换所有图像!它没有清晰的视图。请不要重复您自己的问题,而是更新原始问题!话虽如此,请检查chrome为什么说,这可能与问题有关。@ndm当我发布该问题时,我无法指定问题,如果问题来自
Angular
Api
,但此问题有明确的信息,我删除了以前的问题one@ndm谢谢你的建议,我正在查看
临时标题
我在应用身份验证时没有问题,但似乎此请求的令牌身份验证存在问题,请查看chrome请求,为什么
请求标题
中没有
身份验证令牌
,谢谢回答!但是当使用带有凭据的
时:true
它只发送
选项
请求,之后不发送
获取请求
!对于使用Angular和php发送Cookie,我们需要添加withCredentials:true。您还必须在服务器端进行相同的更改。我对cakephp不太了解,但您可以这样做:
private function setCorsHeaders(){$this->response->cors($this->request)->allowOrigin(['*')->allowMethods(['*'))->allowHeaders(['x-xsrf-token',Origin',Content Type',x-Auth-token]])->allowCredentials(['true'])->exposeHeaders(['Link'])->maxAge(300)->build();}