4
respostas

Erro Interceptor

Estão com problema no interceptor, ta me retornando null, só para constar utilizo $resource ao invés do $http, para chamadas(post,get,put,delete), não sei se talvez não seja isso. vamos em parte.

api.login = $resource(api.baseUrl + 'auth/login', null, {
               'save':   {
                    method:'POST',
                    headers: { 
                        'vimbo-token' : ServicesUtil.geraToken
                    }
                }
            });

dentro do login chamo o post, passando os dados

api.login.save({'vimbo-token' : api.tokenVimbo, pes_email : data.email, pes_senha: data.senha}, 
                function(dados){
                    console.log(dados)
                    if(!dados.erro){
                        $state.go('app.dashboard');
                    }                    
                    if(dados.erro){vm.mensagem = dados.mensagem;}
                });

crio o interceptor e do um console.log, para ver o resultado, aonde o mesmo retorna null

function tokenInterceptor($window, $q, $location){

        var interceptor = {};

        // armazena token
            interceptor.response = function(response){
                console.log('chamei interceptor');
                var token = response.headers('x-access-token');
                console.log(response.headers('x-access-token'));
                if(token){
                    $window.localStorage.token = token;
                    console.log("armazenado token");
                }
                return response;
            };

registro o interceptor


        // interceptor login
        $httpProvider.interceptors.push('tokenInterceptor');

vale lembra que dou um console.log nos dados do body, após o login ao fazer o post e o mesmo esta vindo, somente o headers, não to tendo o acesso dentro do interceptor

e testando a api, via postman, esta ok

access-control-allow-headers →DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,vimbo-token
access-control-allow-methods →GET, POST, PUT, DELETE, OPTIONS
access-control-allow-origin →*
cache-control →no-cache
cf-ray →3466be3fdb0f4a8a-GRU
charset →utf-8
content-encoding →gzip
content-type →application/json
date →Tue, 28 Mar 2017 01:16:17 GMT
server →cloudflare-nginx
status →200
x-access-token →eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vdmltYm8tZ2VzdGFvLm1sL3YxL2F1dGgvbG9naW4iLCJpYXQiOjE0OTA2NjM3NzcsImV4cCI6MTQ5MDY2NzM3NywibmJmIjoxNDkwNjYzNzc3LCJqdGkiOiJrT2treGdZSXczTXByOFZOIiwic3ViIjoiNTg5M2UyYjMwMDI4Y2UzMjI1MjU5YjUxIn0.Ys_IKiyRNDOxMW-m9mqHdLu-h-fF7w9vRKYlyMfjvuE
4 respostas

Se você fez um teste com um log e o interceptador foi chamado, é porque a informação do header não esta sendo recebida, ou seja, enviada pelo server. Não vejo outra explicação, nesse caso.

Já verificou lá no backend, escrutinou a resposta antes dela ser devolvida?

Se você verificar a ultima image que postei, estou chamando direto com o postman, e vc pode observar que esta vindo no header, com o nome (x-access-token).

somente no meu interceptor, não ta chegando. Deixa eu lhe pedi uma coisa, eu não usso o $http para fazer chamadas ajax, uso o $resource, observei na net que o interceptor no $resource é um pouco diferente, será que não é isso?

Eu até queria usar o $http, porem como tenho uma factory api, deixo todas as chamadas la dentro, em um unico arquivo. Com o $hhtp eu não conseguiria fazer isso.

exemplo de como faço com o $resource

 // auth
            // Login
            api.login = $resource(api.baseUrl + 'auth/login', null, {
                // 'get':    {method:'GET'},
                'save':   {
                    method:'POST',
                    headers: { 
                        'vimbo-token' : ServicesUtil.geraToken
                    }
                }
                // 'query':  {method:'GET', isArray:true},
                // 'remove': {method:'DELETE'},
                // 'delete': {method:'DELETE'}
            });

e depois injeto o factory e chamo aonde preciso, dessa forma:

// Methods
        function logar(data){
            console.log('fora do service ' + data.email);
            api.login.save({'vimbo-token' : api.tokenVimbo, pes_email : data.email, pes_senha: data.senha}, 
                function(dados){
                    console.log(dados)
                    if(!dados.erro){
                        $state.go('app.dashboard');
                    }                    
                    if(dados.erro){vm.mensagem = dados.mensagem;}
                });

e com o $http não conseguiria deixar tudo centrado em um unico arquivo e chamar da forma que chamo usando o $resource.

por isso de descobrir como criar interceptor com o $resource, pois estão confiante que o erro na realidade seja pela forma de chamar o interceptor, o que você me diz?

Até onde eu lembro $resource é uma casquinha sobre o $http. O que você pode fazer é usar $http só para verificar se o interceptor continua com o mesmo problema. Se continuar, ou é bug da sua versão do Angular ou o postman esta mascarando algo mais sério que eu não faço ideia do que seja.

Como deixei de usar Angular 1.X em meus projetos faz tempo, não acompanho mais se essa ou aquela versão possui alguma regressão.

Então, resumindo o que você pode fazer:

1 - usar $http para verificar se o erro persiste. 1.A Se persistir, verificar se é bug da versão, se não, questionar o resultado do seu postman.

Por enquanto essas são minhas recomendações.

Vou tentar, mas a maioria dos exemplos encontrado na net é o seguinte:

return $resource(
      '/path/dgs',
      {},
      {update:{method:'PUT'})
      {fetch :{method:'GET',
               // This is what I tried.
               interceptor:{
                 response:function(data) {
                   console.log('response',data);
                 },
                 responseError:function(data) {
                   console.log('error',data);
                 }
               },
               isArray:true
              }
    );

Outra dúvida, em seus projetos ta usando que framework hoje?