Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dúvida no header da autenticação por token.

Boa tarde, estou com um probleminha e gostaria de saber se alguem pode me ajudar...

Seguinte, eu tenho minha aplicação Ionic, e estou fazendo a conexão com minha API nodejs, então segui o método de autenticação por token mostrado na aula de mean, eu consigo fazer a geração do Token, consigo verifica-lo até o login, até ai tudo bem. O problema começa quando tenho que salvar esse token no meu sessionStorage, quandoa cesso a propriedade response.headers, eu vejo que o token não está lá, ou seja ele me retorna null no token.

Gostaria de saber se tem algum outro método para setar o token no header da minha requisição, diferente do modo que fazemos no servidor com req.set('x-access-token', token)

ou se teria alguma forma de buscarmos esse token no client-side diferente da mostrada no curso, pois da forma que está lá, só me retorna null.

Vou deixar os códigos para avaliarem.

angular.module('starter')
    .factory('tokenInterceptor', function($window) {

        var interceptor = {};

        interceptor.response = function(response) {
            var token  = response.headers['x-access-token']; // aqui me retorna null
            if(token) {
                $window.sessionStorage.token = token;
                console.log('Token armazenado no navegador');
            }
            console.log(token); // null
            return response;
        };

        return interceptor;

    });
6 respostas

Leoardo, se não me engano o Ionic apesar de usar o Angular tem nuanças bem particulares e talvez não dê para você fazer um de para diretamente.

No mais, vou chutar que a lógica do curso MEAN funciona com sua APP com ionic. Na hora do usuário efetuar o login você tem que enviar o token, Ao que tudo indica, sua API não esta enviando.

solução!

Então Flavio, ele autoriza o login, porém quando dou um console.log(response) pra ver minha header, já não tem token registrado lá. Pode ser que ele não esteja enviando, mas aí não teria nem como passar da tela de login, correto?

E pode ser que não funcione também, haha

Vou ir tentando pesquisar algo, obrigado pela resposta.

Leonardo, eu estou com o mesmo problema que você.

O que deduzi foi que quando colocamos o interceptor no Ionic, ele vai interceptar tudo que vem da porta local do nosso próprio servidor Ionic, não do nosso servidor Node.

Como são coisas separadas, essa verificação fica inválida. Estou quebrando a cabeça pra achar uma forma de verificar internamente no Ionic rs.

Pô cara, é complicado, se você encontrar alguma forma de arrumar isso, por favor me avise.

Aliás, eu encontrei ontem aqui no fórum uma dúvida referente a isso também, porém a pessoa estava com problema em uma plicação web, e o próprio flávio respondeu, dizendo que utilizou uma versão antiga do jwt, e explicou como utilizar na nova. Talvez isso ajude, não sei, vou dar uma olhada lá de novo.

Alan e Flávio, consegui resolver o problema....

O nosso código, por mais que esteja liberando o cors, ele não permitia que o token fosse enviado no header, então adicionei uma linha de código, mas também instalei o módulo do cors e estou usando no express, vou colocar o código aqui.

var express = require('express');
var consign = require('consign');
var bodyParser = require('body-parser');
var cors = require('cors');
//var firebase = require('firebase');
var app = express();

app.set('secret', 'katetedonoventaenove');
app.use(express.static('../CarreiraFinanceira/www'));
app.use(bodyParser.json());
app.use(cors());

/*firebase.initializeApp({
  serviceAccount: "CarreiraFinanceira-94888979aded.json",
  databaseURL: "https://carreira-financeira.firebaseio.com/"
});*/

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "*");
  res.header('Access-Control-Allow-Credentials', "*");
  res.header('Access-Control-Expose-Headers', 'x-access-token'); //essta linha habilita o token no header
  next();
});

consign({cwd : 'app'})
  .include('models')
  .then('api')
  .then('routes/auth.js')
  .then('routes')
  .into(app);

module.exports = app;

Espero que ajude você Alan, sofri o dia inteiro com isso. haha

Obrigado pela ajuda de vocês.

Show! Fico aliviado igual a você por ter consigo resolver.