Cursos / Informática para Internet / Desenvolvimento Backend / Aula

arrow_back Aula 13 - Autenticando usuários na API

Validando Token JWT


Agora que já estamos gerando o token JWT, é preciso validar. A ideia é proteger algumas rotas para que só usuários autenticados possam utilizá-las.

Criando um middleware de validação

Na pasta de middleware, crie um arquivo, nomeando-o de 'autenticacao.mid.js' e, acompanhando a aula, implemente o código abaixo:

const jwt = require('jsonwebtoken')

function autenticar(req, res, next){

    const auth = req.headers["authorization"]
    const token = auth && auth.split(' ')[1]
    if (!token){
        return res.sendStatus(401)
    }else{
        jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, paylod) => {
            if (err) return res.sendStatus(403)
            req.user = paylod
            next()
        })
    }
}

module.exports = autenticar

Utilizando o middleware

Após criado, para utilizar o middleware, faça a importação no arquivo 'post.rota.js' através da linha:

const autenticar = require('../middleware/autenticacao.mid')

E após isso, utilize a função de autenticar nas rotas que fazem alteração nos posts, como abaixo:

router.post('/', autenticar, upload.single('foto'))
router.post('/', autenticar, postMid)
router.put('/', autenticar, postMid)

Criando um post

Agora, quando o usuário desejar fazer um novo post, deverá estar autenticado. Para testar isso, altere a requisição de adição de um post no arquivo ''.post.http inserindo novas informações.

A requisição deverá ficar como se vê a seguir:

POST http://localhost:8080/api/posts
Content-Type: application/json
Authorization: Bearer 'Token'

{
    "titulo": "Programando em JS Backend",
    "texto": "Título do texto...",
    "userId": 3
}

A informação ''Token deverá ser substituída pelo token, que será retornado ao usuário fazer a autenticação.

Limitando o tempo de autenticação

Até o momento, ao conseguir esse token, ele fica para sempre válido e isso não é uma boa prática. Então, ao gerar o token na rota de login, é interessante passar um tempo de vida para essa informação.

Então, no momento em que estiver gerando o token, passe o parâmetro expiresIn com o tempo de vida dele. A alteração é feita dessa forma:

const token = jwt.sign(payload, process.env.ACCESS_TOKEN_SECRET, {expiresIn: '40s'})

Versão 5.3 - Todos os Direitos reservados