2015-04-13 10 views
8

Sto lottando su un tema con cors tra js angolari e sails.js (node.js quadro)Angularjs/sailsjs: Access-Control-Allow-Origin non è consentita da Access-Control-Allow-Headers

Provo a correggere l'errore: XMLHttpRequest non può caricare http://localhost:1337/en/auth/forgetpass/email. Campo di intestazione richiesta Access-Control-Allow-Origin non consentito da Access-Control-Allow-Headers.

Quando non attivo il mio intercettore funziona bene. Non ho questo errore Quando lo attivo, ho l'errore.

Nel mio setup .config ho il codice qui sotto:

//Enable cross domain calls 
$httpProvider.defaults.useXDomain = true; 
delete $httpProvider.defaults.headers.common['X-Requested-With']; 

$httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*'; 
$httpProvider.defaults.headers.common['Access-Control-Allow-Origin'] = '*'; 
$httpProvider.defaults.headers.common['Access-Control-Allow-Methods'] = 'GET,POST,PUT,HEAD,DELETE,OPTIONS'; 

$httpProvider.interceptors.push('TokenInterceptor'); 

Poi, nel mio setup intercettore ho il codice qui sotto:

return { 
    request: function (config) { 
     var id = Session.getprop('id'); 
     if(id) { 
     config.headers = config.headers || {}; 
     config.headers.Authorization = 'Bearer ' + id; 
     } 
     return config; 
    }, ... 

Infine, il risultato dalla scheda di rete Chrome è:

Remote Address:127.0.0.1:1337 
Request URL:http://localhost:1337/en/auth/forgetpass/email 
Request Method:OPTIONS 
Status Code:200 OK 

Response Headers 
Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:* 
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS, HEAD 
Access-Control-Allow-Origin:* 
Allow:GET,POST,PUT,HEAD,DELETE,TRACE,COPY,LOCK,MKCOL,MOVE,PROPFIND,PROPPATCH,UNLOCK,REPORT,MKACTIVITY,CHECKOUT,MERGE,M-SEARCH,NOTIFY,SUBSCRIBE,UNSUBSCRIBE,PATCH 
Connection:keep-alive 
Content-Length:154 
Content-Type:text/html; charset=utf-8 
Date:Sun, 12 Apr 2015 23:51:14 GMT 
Set-Cookie:sails.sid=s%3A-bZxQgFntbDqTtaFyWDFFgFr.szR0F68VfIBjVW9kyans9d6v5fz7RMtalQCoMFdbH%2Fg; Path=/; HttpOnly 
X-Powered-By:Sails <sailsjs.org> 

Request Headers 
Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:access-control-allow-origin, accept, access-control-allow-headers, access-control-allow-methods 
Access-Control-Request-Method:POST 
Connection:keep-alive 
Host:localhost:1337 
Origin:http://localhost:9000 
Referer:http://localhost:9000/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 

E ho ancora lo stesso errore. Un'idea?

Grazie mille!

+0

Che cos'è un "intercettore"? Questo non è un concetto di sails.js. –

+0

Interceptor è un concetto di angularjs – ameilland

risposta

9

Ok ho finalmente trovato il problema.

Ho confrontato la risposta e richiesto le intestazioni con l'interceptor e con esso.

Ho cambiato il mio codice come di seguito e funziona.

In app.js di angularjs

ho commentato tutta la parte intestazioni.

//Enable cross domain calls 
    /* $httpProvider.defaults.useXDomain = true; 

//Remove the header used to identify ajax call that would prevent CORS from working 
delete $httpProvider.defaults.headers.common['X-Requested-With']; 

$httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = 'origin, content-type, accept'; 
$httpProvider.defaults.headers.common['Access-Control-Allow-Origin'] = '*'; 
$httpProvider.defaults.headers.common['Access-Control-Allow-Methods'] = 'GET,POST,PUT,HEAD,DELETE,OPTIONS';*/ 

$httpProvider.interceptors.push('TokenInterceptor'); 

E nel mio sails.js setup setup corsie Ho commentato i metodi e le intestazioni. E funziona bene.

module.exports.cors = { 

    /*************************************************************************** 
    *                   * 
    * Allow CORS on all routes by default? If not, you must enable CORS on a * 
    * per-route basis by either adding a "cors" configuration object to the * 
    * route config, or setting "cors:true" in the route config to use the  * 
    * default settings below.             * 
    *                   * 
    ***************************************************************************/ 

    allRoutes: true, 

    /*************************************************************************** 
    *                   * 
    * Which domains which are allowed CORS access? This can be a    * 
    * comma-delimited list of hosts (beginning with http:// or https://) or * 
    * "*" to allow all domains CORS access.         * 
    *                   * 
    ***************************************************************************/ 

    origin: '*', 

    /*************************************************************************** 
    *                   * 
    * Allow cookies to be shared for CORS requests?       * 
    *                   * 
    ***************************************************************************/ 

    credentials: true 

    /*************************************************************************** 
    *                   * 
    * Which methods should be allowed for CORS requests? This is only used in * 
    * response to preflight requests (see article linked above for more info) * 
    *                   * 
    ***************************************************************************/ 

    // methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD', 

    /*************************************************************************** 
    *                   * 
    * Which headers should be allowed for CORS requests? This is only used in * 
    * response to preflight requests.           * 
    *                   * 
    ***************************************************************************/ 

    // headers: 'origin, content-type, accept' 

}; 
0

Hai provato impostando la origine e metodi in /config/cors.js?

e inoltre è possibile trovare ulteriori informazioni su questa pagina Sails.Config.CORS

Problemi correlati