2017-07-14 160 views
1

我与离子框架3.5.2测试和这里的版本信息离子3.5.2授权头在HTTP请求中缺少

enter image description here

我需要发送标有授权头中的认证请求让用户登录系统,就像这样 enter image description here

我总是得到404错误,我已经启用了CORS。我使用邮递员进行仔细检查,我向邮递员发送同样的请求,看起来没问题。

我仔细检查了提琴手,发现了一个区别,那就是头部缺少授权,它不会与我的请求一起发送。由于邮递员工作原因,我的代码可能有些不正确,服务器实现没有问题。

enter image description here enter image description here

这是由邮差送来的请求,经授权的头,所以它是好的

,这里是我的要求,没有看到一起发送的授权头,所以我得到了404

你能提醒我想念什么吗?

编辑1:添加一个屏幕截图Anexon enter image description here

编辑2:7月15日] 我看到角被发送我的方法OPTION请求,而邮递员使用POST其中工程。我现在的问题是,我怎样才能像邮差一样发送邮件?

为了以防万一,为了支持OPTION,我应该从服务器端实现什么?但这是“万一”,现在服务器在POST上看起来很好。

这里是邮差

POST https://abc.xyz.com/SignIn HTTP/1.1 
 
Host: abc.xyz.com 
 
Connection: keep-alive 
 
Content-Length: 63 
 
Accept: application/vnd.softix.api-v2+json 
 
Postman-Token: c2aa12cc-ea95-59d6-79de-4829b96b759b 
 
Cache-Control: no-cache 
 
Origin: chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop 
 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3147.0 Safari/537.36 
 
Authorization: Bearer yTJVNAb4_4h0BRTEA8MoNBuQhpKXuO6BvyIabbSDZMdBW_RTG2_tNME7R_RqeFqMjg2 
 
Content-Type: application/json 
 
Accept-Encoding: gzip, deflate, br 
 
Accept-Language: en-US,en;q=0.8,vi;q=0.6 
 

 
{ "Username" : "user", "Password" : "pass" }

,这里是我的

OPTIONS https://abc.xyz.com/SignIn HTTP/1.1 
 
Host: abc.xyz.com 
 
Connection: keep-alive 
 
Access-Control-Request-Method: POST 
 
Origin: http://evil.com/ 
 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3147.0 Safari/537.36 
 
Access-Control-Request-Headers: authorization,content-type 
 
Accept: */* 
 
Referer: http://localhost:8100/ 
 
Accept-Encoding: gzip, deflate, br 
 
Accept-Language: en-US,en;q=0.8,vi;q=0.6

回答

0

你检查这authHeader变量是不是空的?

其次,我正在使用以下headers.append('<header-type>', '<header-content>')而不是headers.set('<header-type>', '<header-content'>)。我认为你是覆盖头值,所以我将其更改为:

let authHeader = 'Bearer $(this.authTokenResponse.access_token)'; 

headers = new Headers(); 
headers.append('Authorization', authHeaders); 
headers.append('Accept', 'application/vdn.softix.api-v2+json'); 
headers.append('Content-Type', 'application/json'); 

// ... 

编辑1

而且,我注意到另一个不同之处。我使用后选择直接作为any对象类型,而不是使用RequestOptions构造:

let options = {}; 
options.headers = headers; 

post('<url_request>', signinRequest, options) 
    .map(res => res.json()) 
    .subscribe(data =>{ 
    this.signinResponse = data; 
    console.log(data); 
    }) 
+0

肯定Anexon,我已经添加截图,我debuged,authHeader和头都反对蛮好看的。我曾经使用'追加',但它也不起作用。 – khoailang

+0

似乎您通过发布选项传递的所有标题都缺失。它可能与RequestOptions构造函数有关。 – Anexon

+0

非常感谢Anexon,我已经更新了使用RequisitionOptions与您所拥有的完全相同,但至今没有运气。我发现Angular使用方法OPTION发送我的请求,而邮递员使用POST,而不是我的请求。我现在的问题是,我怎样才能像邮差一样发送邮件?我还用标题编辑了我的问题,以方便您查阅。谢谢。 为了以防万一为了支持OPTION,我应该从服务器端实现什么?但这是“万一”,现在服务器在POST上看起来很好。 – khoailang

0

我想我找出我的问题。我使用了扩展名为Allow-Control-Allow-Orginin的CORS扩展名,我认为它可以工作,但是没有。我改用代理来代替,那么现在没问题,我的代码没有任何改变。 enter image description here