Vamos lá...
Se no meu código do server onde verifico o token
Deixo com abaixo, na primeira requisição não vem o token
Código
api.validar = function (req, res, next) {
var token = req.headers['x-access-token'];
console.log('**************************antes');
console.log(req.headers);
//console.log(token);
console.log('**************************depois');
if (token) {
try {
var decoded = jwt.decode(token, segredo);
if (decoded.exp <= Date.now()) {
res.json(400, {error: 'Acesso Expirado, faça login novamente'});
}
model.findOne({ _id: decoded.iss }, function(err, user) {
if(err)
res.status(500).json({message: "erro ao procurar usuario do token."})
req.user = user;
return next();
});
} catch (err) {
return res.status(401).json({message: 'Erro: Seu token é inválido'});
}
} else {
res.status(401).json({message: 'Token não encontrado ou informado'});
}
}
Console
**************************antes
{ host: 'localhost:3000',
connection: 'keep-alive',
'access-control-request-method': 'GET',
origin: 'http://localhost:8080',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'access-control-request-headers': 'x-access-token',
accept: '*/*',
referer: 'http://localhost:8080/cargas',
'accept-encoding': 'gzip, deflate, sdch, br',
'accept-language': 'pt-BR,pt;q=0.8' }
**************************depois
Caso eu adicione no início o if
if(req.headers['access-control-request-headers'])
return next();
Deixando o código assim:
api.validar = function (req, res, next) {
var token = req.headers['x-access-token'];
console.log('**************************antes');
console.log(req.headers);
//console.log(token);
console.log('**************************depois');
if(req.headers['access-control-request-headers'])
return next();
if (token) {
try {
var decoded = jwt.decode(token, segredo);
if (decoded.exp <= Date.now()) {
res.json(400, {error: 'Acesso Expirado, faça login novamente'});
}
model.findOne({ _id: decoded.iss }, function(err, user) {
if(err)
res.status(500).json({message: "erro ao procurar usuario do token."})
req.user = user;
return next();
});
} catch (err) {
return res.status(401).json({message: 'Erro: Seu token é inválido'});
}
} else {
res.status(401).json({message: 'Token não encontrado ou informado'});
}
}
O console fica assim:
**************************antes
{ host: 'localhost:3000',
connection: 'keep-alive',
'access-control-request-method': 'GET',
origin: 'http://localhost:8080',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'access-control-request-headers': 'x-access-token',
accept: '*/*',
referer: 'http://localhost:8080/cargas',
'accept-encoding': 'gzip, deflate, sdch, br',
'accept-language': 'pt-BR,pt;q=0.8' }
**************************depois
**************************antes
{ host: 'localhost:3000',
connection: 'keep-alive',
accept: 'application/json, text/plain, */*',
origin: 'http://localhost:8080',
'x-access-token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI1OGM5MzRmOTM4OWVkODhjMmRlY2NiYmYiLCJleHAiOjE0OTAxODY0Mjg5ODl9.dG_jHBGNQZtNNECqkM2zNR8LPBu1gG86dF0CIJaH0eg',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
referer: 'http://localhost:8080/cargas',
'accept-encoding': 'gzip, deflate, sdch, br',
'accept-language': 'pt-BR,pt;q=0.8',
'if-none-match': 'W/"58ff3-cvFBChi9XY9SbP6cZoOVCw"' }
**************************depois
Ai funciona.. Não estou sabendo se a maneira de tratar esta primeira requisição é assim mesmo.