2
respostas

Utilizando JWT nas rotas

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);
    }
});
2 respostas

Olá, Osnir.

Não entendi qual é o momento que você quer ser redirecionado para o dashboard?

Quero ser redirecionado para o DASHBOARD ao clicar no botão (#logar), onde será disparado o evento que executará as funções.