Iron-ajax 401未经授权或CORS问题

时间:2017-05-25 16:37:56

标签: cors polymer polymer-1.0 polymer-2.x iron-ajax

我在Polymer 2.0上使用iron-ajax时遇到了问题。我的代码基于Polymer 1.0,并且我试图对其进行调整。我通过这样的POST发送我的表格:

模板:                          

        <div class="wrapper-btns">
            <paper-button raised class="primary" on-tap="postLogin">Log In</paper-button>
            <paper-button class="link" on-tap="postRegister">Sign Up</paper-button>
        </div>

代码:

    _setReqBody() {
        this.$.registerLoginAjax.body = this.formData;
    }

    postLogin() {
        this.$.registerLoginAjax.url = 'http://localhost:3001/sessions/create';
        this._setReqBody();
        this.$.registerLoginAjax.generateRequest();
    }

Iron-Ajax设置:

    <iron-localstorage name="user-storage" value="{{storedUser}}"></iron-localstorage>
    <app-data key="userData" data="{{storedUser}}"></app-data>

    <iron-ajax
        id="registerLoginAjax"
        method="post"
        content-type="application/json"
        handle-as="text"
        on-response="handleUserResponse"
        on-error="handleUserError"></iron-ajax>

当我这样做时,我收到以下错误:

  

POST http://localhost:3001/sessions/create 400(错误请求)

当我在Iron-Ajax上使用这一行时:

with-credentials="true"

看起来错误是一个CORS问题:

  

XMLHttpRequest无法加载http://localhost:3001/sessions/create。   对预检请求的响应没有通过访问控制检查:   “访问控制 - 允许 - 来源”的价值&#39;响应中的标题必须   不是通配符&#39; *&#39;当请求的凭据模式是   &#39;包括&#39 ;.起源&#39; http://127.0.0.1:8081&#39;因此是不允许的   访问。由...发起的请求的凭据模式   XMLHttpRequest由withCredentials属性控制。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

更改http://localhost:3001/sessions/create后端的服务器端代码,以便在针对来自Access-Control-Allow-Origin: http://127.0.0.1:8081/的请求的响应中发送响应标头http://127.0.0.1:8081/,而不是发回响应标头Access-Control-Allow-Origin: *正如现在所做的那样。

Credentialed requests and wildcards section of the MDN page on CORS解释了原因:

  

在回复凭证请求时,服务器必须在Access-Control-Allow-Origin标头的值中指定原点,而不是指定&#34; *&#34;通配符。