Alterei parte do projeto para utilizar autenticação e autorização com PASSPORT-JWT. Consegui realizar toda configuração e já consigo realizar requisições mandando no header o token gerado em um login que construi. Porem, após enviar o token recebido a API, ela não me redireciona para a pagina "dashboard" que neste caso esta em uma rota privada.
No response do fetch(javascript) ate recebo a string html via console, porem nao consigo fazer que o browser receba esta pagina ou realize outra requição, mas ja com o token no header.
Utilizei o window.location, porem ele não suporta envio de header.
Segue codigo javascript.
var logar = document.querySelector("#logar");
logar.addEventListener('click', function(event) {
event.preventDefault();
var dados = document.querySelector('#formulario');
fetch('/token', {
method: 'POST',
credentials: 'include',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: dados.email.value,
password: dados.password.value
})
})
.then(function(response) {
response.json().then(function(data) {
console.log(data.token);
window.localStorage.accessToken = data.token;
});
});
fetch('/dashboard', {
method: 'GET',
credentials: 'include',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Access-Control-Allow-Origin': '*',
'Accept': 'text/plan',
'Authorization': 'Bearer ' + window.localStorage.getItem('accessToken')
}
})
.then(function(response) {
// window.location.assign('/dashboard');
console.log(response);
document.location.href = response.url;
});
});
Segue abaixo index.js que roda no server.
app.get('/dashboard', auth.authenticate(), function(req, res) {
res.setHeader('Content-Type', 'text/html');
res.render('dashboard');
});
app.get('/login', function(req, res) {
res.render('login');
});
app.post('/token', function(req, res) {
console.log(req.body);
if (req.body.email && req.body.password) {
var email = req.body.email;
var password = req.body.password;
console.log(email, password);
var user = users.find(function(u) {
return u.email === email && u.password === password;
});
if (user) {
var payload = { id: user.id };
console.log(payload);
var token = jwt.encode(payload, cfg.jwtSecret);
res.cookie('Bearer', token);
console.log(token);
res.json({ token: token });
localStorage.setItem('myFirstKey', 'OSNIR TEIIEIE');
} else {
res.sendStatus(401);
}
} else {
res.sendStatus(401);
}
});