Header Authorization em todos requests

55 views
Skip to first unread message

Arthur Menezes

unread,
Mar 22, 2017, 9:02:16 PM3/22/17
to AngularJS BR
Boa noite, alguém sabe me dizer, como faço para inserir no $resource um header padrão, de token de autenticação, para todas as ações(query, get, post...)?

eu estou fazendo assim:

angular.module('xpto', ['ngResource'])
    .factory('xyz', function($resource) {
        ,{}
        ,{
            query   :   {
                method  :   'GET'
                ,isArray :   true
                ,headers :   {
                    'Authorization' : 'Bearer eyJhbGciOiJIUzI1NiIsImtpZCI6IjE0OTAxOTg4MTcxMDkifQ.eyJzdWIiOiJtYXJjb3MucGlybWV6QGdtYWlsLmNvbSIsImlzcyI6InNuYXAiLCJleHAiOjE0OTAyODk4NjB9.DT6OwIpTiRL8WUVwNRLzVvL3oSgLC7Qf-6lHH5eVy_4'                
                }
            }
            ,get :   {
                method  :   'GET'
                ,headers    :   {
                    'Authorization' : 'Bearer eyJhbGciOiJIUzI1NiIsImtpZCI6IjE0OTAxOTg4MTcxMDkifQ.eyJzdWIiOiJtYXJjb3MucGlybWV6QGdtYWlsLmNvbSIsImlzcyI6InNuYXAiLCJleHAiOjE0OTAyODk4NjB9.DT6OwIpTiRL8WUVwNRLzVvL3oSgLC7Qf-6lHH5eVy_4'       
                }
            }    
        });
    });


 porém, tenho uma sensação de que tem uma forma melhor, mas não estou conseguindo encontrar

Aysion KuraYami

unread,
Mar 23, 2017, 5:55:44 AM3/23/17
to AngularJS BR
Uma outra forma seria usando um interceptor no request, assim em todas as suas requisições iria ter seu token, 

na documentação fala um pouco sobre interceptor https://docs.angularjs.org/api/ngResource/service/$resource

William Thiago

unread,
Mar 23, 2017, 8:45:37 PM3/23/17
to angula...@googlegroups.com
Ou configurar o $httpProvider pra adicionar o header.

[]s
William Thiago

2017-03-23 6:55 GMT-03:00 Aysion KuraYami <aysiond...@gmail.com>:
Uma outra forma seria usando um interceptor no request, assim em todas as suas requisições iria ter seu token, 

na documentação fala um pouco sobre interceptor https://docs.angularjs.org/api/ngResource/service/$resource

--
Você recebeu essa mensagem porque está inscrito no grupo "AngularJS BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para angularjs-br+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Arthur Menezes

unread,
Mar 24, 2017, 5:18:25 PM3/24/17
to AngularJS BR
Estou tentando fazer isso, porém qdo eu uso essa linha 
$httpProvider.interceptors.push('AuthorizationInterceptor');

no meu módulo principal ganho um erro "[$compile:tpload] Failed to load template". Segue o código do meu AuthorizationInterceptor

angular
   .module('httpInterceptor', ['ngStorage'])
   .factory('AuthorizationInterceptor', function ($localStorage, $q, $templateCache) {
       return {
           request: function(config) {                  
               config.headers = config.headers || {};
               if ($localStorage.currentUser.accessToken) {
                   config.headers.Authorization = 'Bearer ' + $localStorage.currentUser.accessToken;
               }
               return config || $q.when(config);
           },
           response: function(response) {
               if (response.status === 401) {
                   // TODO: Redirect user to login page.
               }
               return response || $q.when(response);
           }
       };
   });

Qual a relação do uso do $httpProvider com esse erro? como resolvo isso?



Em quinta-feira, 23 de março de 2017 21:45:37 UTC-3, William Thiago escreveu:
Ou configurar o $httpProvider pra adicionar o header.

[]s
William Thiago

2017-03-23 6:55 GMT-03:00 Aysion KuraYami <aysiond...@gmail.com>:
Uma outra forma seria usando um interceptor no request, assim em todas as suas requisições iria ter seu token, 

na documentação fala um pouco sobre interceptor https://docs.angularjs.org/api/ngResource/service/$resource

--
Você recebeu essa mensagem porque está inscrito no grupo "AngularJS BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para angularjs-br...@googlegroups.com.

Américo Neto

unread,
Mar 24, 2017, 10:38:38 PM3/24/17
to angula...@googlegroups.com
Tira esse $templateCache

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para angularjs-br+unsubscribe@googlegroups.com.

Arthur Menezes

unread,
Mar 25, 2017, 7:42:20 AM3/25/17
to AngularJS BR
Nada, esse templateCache foi apenas um teste, ele, nesse exemplo está só no parâmetro, sem ser usado no código

Aysion KuraYami

unread,
Mar 25, 2017, 12:04:52 PM3/25/17
to AngularJS BR
Não cheguei a testar o código, mas eu uso os interceptors dessa forma, testa ai 

angular
.module('httpInterceptor', ['ngStorage'])
.config(function($httpProvider) {
  $httpProvider.interceptors.push(function($localStorage, $q, $templateCache) {
    return {
      request: function(config) {                  
        config.headers = config.headers || {};
        if ($localStorage.currentUser.accessToken) {
          config.headers.Authorization = 'Bearer ' + $localStorage.currentUser.accessToken;
        }
        return config || $q.when(config);
      },
      response: function(response) {
        if (response.status === 401) {
          // TODO: Redirect user to login page.
        }
        return response || $q.when(response);
      }
    };
  });
}); 

Arthur Menezes

unread,
Mar 26, 2017, 4:26:45 PM3/26/17
to AngularJS BR
E depois seta como dependência no módulo principal, apenas?

Aysion KuraYami

unread,
Mar 28, 2017, 12:50:36 PM3/28/17
to AngularJS BR
Sim, essa parte usei o seu codigo como exemplo 

angular
.module('httpInterceptor', ['ngStorage'])

mas também poderia usar direto o modulo principal

angular
.module('app')
Reply all
Reply to author
Forward
0 new messages