Acompanhei as aulas, baixei o projeto final comparei com o meu feito no curso, na última parte da autenticação das urls com o token armazenado na session storage da erro recebo 401 unauthorized.
{data: "Unauthorized", status: 401, config: {…}, statusText: "Unauthorized", headers: ƒ}
config:
data: {login: "plsc", senha: "123"}
headers: {Accept: "application/json, text/plain, */*", Content-Type: "application/json;charset=utf-8"}
method: "POST"
transformRequest: [ƒ]
transformResponse: [ƒ]
url: "/autenticar"
__proto__: Object
data: "Unauthorized"
headers: ƒ (c)
arguments: (...)
caller: (...)
length: 1
name: ""
prototype: {constructor: ƒ}
__proto__: ƒ ()
[[FunctionLocation]]: angular.min.js:77
[[Scopes]]: Scopes[3]
status: 401
statusText: "Unauthorized"
__proto__: Object
e não acontece o redirect para a pagina de login contudo o token esta gravado na session storage.
token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InBzbGMiLCJpYXQiOjE1OTYwNTU2ODEsImV4cCI6MTU5NjE0MDI4MX0.TEwB4Es7vXwuWU67h_Y0FwsU3ofgXeS08-hiNvzMoBY
interceptor.js
angular.module('alurapic')
.factory('tokenInterceptor', function($window, $q, $location) {
var interceptor = {};
interceptor.request = function(config) {
console.log('enviar o token na requisição');
config.headers = config.headers || {};
if($window.sessionStorage.token) {
console.log('Adiconando token no header da requisição para ser enviado para o servidor.');
config.headers['x-access-token'] = $window.sessionStorage.token;
}
return config;
};
interceptor.response = function(response) {
var token = response.headers('x-access-token');
if(token != null) {
$window.sessionStorage.token = token;
console.log('Armazenando token recebido no navegador:', token);
}
return response;
}
interceptor.responseError = function(rejection) {
if(rejection != null && rejection.status == 401) {
// redirecionar para a parcial de login no angular
delete $window.sessionStorage.token;
$location.path('/login');
}
return $q.reject(rejection);
};
return interceptor;
});
api/auth.js
var mongoose = require('mongoose');
var jwt = require('jsonwebtoken');
module.exports = function(app) {
var api = {};
var model = mongoose.model('Usuario');
api.autentica = function(req, res) {
model
.findOne({
login: req.body.login,
senha: req.body.senha
})
.then(function(usuario) {
if(!usuario) {
console.log('Login e senha inválidos!');
res.sendStatus(401);
} else {
// criar o token
console.log(usuario.login);
var token = jwt.sign( {login: usuario.login}, app.get('secret'), {
expiresIn: 84600 // esse valor equivale a 24 horas
});
console.log('Token adicionado na resposta...!');
res.set('x-access-token', token);
res.end();
}
});
};
api.verificaToken = function(req, res, next) {
var token = req.headers['x-access-token'];
if(token) {
console.log('Token recebido, decodificando...!');
jwt.verify(token, app.get('secret'), function(err, decoded) {
if (err) {
console.log('Token rejeitado');
return res.sendStatus(401);
} else {
console.log('Token aceito: ',token);
req.usuario = decoded;
next();
}
});
} else {
console.log('Nenhum token enviado pslc');
return res.sendStatus(401);
}
}
return api;
};