Polymer.js iron-ajax 标头基本授权不起作用

Posted

技术标签:

【中文标题】Polymer.js iron-ajax 标头基本授权不起作用【英文标题】:Polymer.js iron-ajax headers basic authorization not working 【发布时间】:2016-11-30 08:43:14 【问题描述】:

我正在执行一个跨源请求,以从具有基本身份验证的 url 获取 json 响应。因此,点击按钮,正在设置基本身份验证的标题。当我在发送请求之前打印出这些值时,我会看到它们。但是当我检查 chrome 开发工具的请求时,我没有看到标题已设置。该请求也变成来自“GET”请求的“Options”请求,响应为 401 未授权。有什么遗漏吗?

 <paper-input type="search" value="imageUrl" placeholder="Enter Image URL"></paper-input> 
  <div class="buttons">
    <paper-button on-tap="getData" autofocus>Search</paper-button>
  </div>
  <iron-ajax
  id="xhr"
  url="https://api.com/v1"
  params='"url":"some query value"'
  handle-as="json"
  method="GET"
  last-response="ajaxResponse"></iron-ajax>

  getData: function()
    this.$.xhr.headers['X-Requested-With'] = "XMLHttpRequest";
    this.$.xhr.headers['Authorization'] = this.makeHeaders(this.user, this.password);
    this.$.xhr.generateRequest();
  

【问题讨论】:

这让我相信浏览器正在向“api.com/vi”发送带有选项方法的预检请求,您需要通过发送回 http 状态 200 来处理该选项方法,然后调用应该正常处理。 检查这些网址:***.com/questions/30632200/…***.com/questions/8685678/… @getbuckts 它实际上是我正在使用的第三方 api 服务,当我从邮递员那里进行操作时它可以工作。我也尝试使用 safari 和 firefox 并显示相同的失败消息。不知道我做错了什么 你能展示一下“this.makeHeaders()”代码的作用吗? makeHeaders: function(user, password) return "Basic" + btoa(user + ":" + password); , 【参考方案1】:

默认情况下,iron-ajax 不会为跨站点请求发送credentials

您可以通过在iron-ajax 上设置withCredentials 属性来更改此设置:

<iron-ajax
  id="xhr"
  url="https://api.com/v1"
  params='"url":"some query value"'
  handle-as="json"
  with-credentials="true"
  method="GET"
  last-response="ajaxResponse"></iron-ajax>

this.$.xhr.withCredentials = true;

【讨论】:

以上是关于Polymer.js iron-ajax 标头基本授权不起作用的主要内容,如果未能解决你的问题,请参考以下文章

material.io和Polymer.js之间的关系

Paginate Iron-Ajax回应

使用 Polymer Iron-ajax 和 Node.js 发出 CORS 请求

禁止预检 403 响应

如何在聚合物 3 中包含外部 html 文件和 js 文件?

打字机支持聚合物v3