I am trying to send the request from one localhost port to the another. I am using angularjs on the frontend and node on the backend.
Since it is CORS request, In node.js, i am using
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
and in the angular.js service file, I am using
return {
getValues: $resource(endpoint + '/admin/getvalues', null, {
'get': {
method: 'GET',
headers:{'Authorization':'Bearer'+' '+ $localStorage.token}
}
}),
}
I am getting the following error
Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response.
Please help!
The
res.header('Access-Control-Allow-Origin', '*');
wouldn't work with Autorization header. Just enable pre-flight request, using cors library:You have to add options also in allowed headers. browser sends a preflight request before original request is sent. See below
From source https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS
EDITED
You can avoid this manual configuration by using npmjs.com/package/cors npm package.I have used this method also, it is clear and easy.
This is an API issue, you won't get this error if using Postman/Fielder to send HTTP requests to API. In case of browsers, for security purpose, they always send OPTIONS request/preflight to API before sending the actual requests (GET/POST/PUT/DELETE). Therefore, in case, the request method is OPTION, not only you need to add "Authorization" into "Access-Control-Allow-Headers", but you need to add "OPTIONS" into "Access-Control-allow-methods" as well. This was how I fixed:
If you don't want to install the cors library and instead want to fix your original code, the other step you are missing is that Access-Control-Allow-Origin:* is wrong. When passing Authentication tokens (e.g. JWT) then you must explicitly state every url that is calling your server. You can't use "*" when doing authentication tokens.
First you need to install
cors
by using below command :Now add the following code to your app starting file like (
app.js or server.js
)