Home Reference Source

src/usuarios/middlewares-autenticacao.js

const passport = require('passport')
const Usuario = require('./usuarios-modelo')
const tokens = require('./tokens')

module.exports = {
  local (req, res, next) {
    passport.authenticate(
      'local',
      { session: false },
      (erro, usuario, info) => {
        if (erro) {
          return next(erro)
        }

        req.user = usuario
        req.estaAutenticado = true
        return next()
      }
    )(req, res, next)
  },

  bearer (req, res, next) {
    passport.authenticate(
      'bearer',
      { session: false },
      (erro, usuario, info) => {
        if (erro) {
          return next(erro)
        }

        req.token = info.token
        req.user = usuario
        req.estaAutenticado = true
        return next()
      }
    )(req, res, next)
  },

  async refresh (req, res, next) {
    try {
      const { refreshToken } = req.body
      const id = await tokens.refresh.verifica(refreshToken)
      await tokens.refresh.invalida(refreshToken)
      req.user = await Usuario.buscaPorId(id)
      return next()
    } catch (erro) {
      if (erro.name === 'InvalidArgumentError') {
        return res.status(401).json({ erro: erro.message })
      }
      return res.status(500).json({ erro: erro.message })
    }
  },

  async verificacaoEmail (req, res, next) {
    try {
      const { token } = req.params
      const id = await tokens.verificacaoEmail.verifica(token)
      const usuario = await Usuario.buscaPorId(id)
      req.user = usuario
      next()
    } catch (erro) {
      next(erro)
    }
  }
}