Rajaram Shelar
Rajaram Shelar

Reputation: 7897

Can not add bearer token in $resource header

I am not able to add bearer token in $resource service header for token based authentication. I used following code

Factory

return $resource(appSettings.serverPath + "/api/product/:id", null, {
            'get': {
                method: 'GET',
                headers: {
                    'Authorization': 'Bearer ' + currentUser.getProfile().token
                }
            }

Also i tried below code as per some research in app.run

 $http.defaults.headers.common.Authorization = 'Bearer ' + currentUser.getProfile().token;

But both options do not add this header in my request and i can see request in chrome without this headers and hence got unauthorized response. I am using angular 1.5.9. Any clue on this.

Upvotes: 0

Views: 759

Answers (1)

georgeawg
georgeawg

Reputation: 48968

Assuming currentUser is a service and currentUser.getProfile() is a synchronous API:

app.factory("myRestAPI", function(currentUser) {
    return $resource(appSettings.serverPath + "/api/product/:id", null, {
        'get': {
            method: 'GET',
            headers: {
                //REPLACE expression
                //'Authorization': 'Bearer ' + currentUser.getProfile().token
                //WITH a function
                'Authorization': 
                      function() {
                          return 'Bearer ' + currentUser.getProfile().token;
                      }
            }
        }
    );
});

By using a function instead of an expression, the Authorization header will be computed on every call.

From the Docs:1

  • headers – {Object} – Map of strings or functions which return strings representing HTTP headers to send to the server. If the return value of a function is null, the header will not be sent. Functions accept a config object as an argument.

Upvotes: 1

Related Questions