No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Comprobar verificaci贸n con token

12/29
Recursos

Aportes 25

Preguntas 3

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Comentarios importantes a este punto:

  • En el replace de Bearer se esta haciendo como replace(鈥淏earer鈥, 鈥溾) pero por defecto cuando se manda un token con este formato, por defecto se le agrega un espacio en el medio. Digamos que tu token es 鈥渜werty12345鈥 al servidor va a llegar como 鈥淏earer qwerty12345鈥 por ende para obtener correctamente el token y que no explote tenemos que hacer un replace con Bearer y un espacio, osea replace("Bearer ", 鈥溾).

  • A este punto cuando hagan el update les va a crear un usuario nuevo. Esto esta bien por que en el metodo upsert definido en nuestro dummy simpletemente hacemos un push sobre nuestra tabla, no hacemos primero una buesqueda por id si el mismo nos viene y actualizamos o en caso contrario creamos un nuevo 鈥渞ecord鈥. Esto seguro va a estar resuelto cuando se use un store en si mismo pero si quieren arreglarlo por ahora pueden agregar un metodo de busqueda por id dentro de la tabla aunque como tip deberia la tabla en vez de ser un array ser un hash, donde cada key es un id, asi la busqueda se hace mas optima.

  • Les puede pasar que algunas exceptions que les salgan, lleguen hasta el cliente en la response, keep calm and watch the next class.

Cualquier cosa estoy para dar una mano si tienen algun problema

Importante: jwt.verify si los tokens son diferentes te devuelve una exception. Para que no se rompa podes wrappear verify con un try-catch


function verifyToken(token) {
  try {
    return jwt.verify(token, secret)
  } catch (error) {
    throw new Error(error.message)
  }
}

ami me crea otro usuario

Me encontr茅 con un error super extra帽o. Usando el mismo token siempre me devolv铆a error jwt.verify.
Hice console.log del token generado contra el token que recibo, exactamente los mismos.

Si llegas hasta ac谩 y tuviste ese error, yo lo resolv铆 usando TRIM dentro de la function getToken

function getToken(authorization) {
  if (!authorization) throw new Error("No auth token sent");
  if (authorization.indexOf("Bearer ") === -1)
    throw new Error("Invalid token format");
    const token = authorization.replace("Bearer", "");
    return token.trim()
}

a mi me agrega otro Usuario , porfavor actualizar esta secci贸n

muy buena clase en la anterior no habia entendido nada y en esta se aclaro todo!!

Por el momento no responde nuestro servidor al editar nuestro usuario, 茅sto porque nunca llega a un response.success, para 茅sto tenemos que devolver algo en el check, por ejemplo:

const check = {
  own: (req, owner) => {
    const decoded = decodeHeader(req)

    if (decoded.id !== owner) throw error('no puedes hacer 茅sto', 401)
    return (true)
  }
}

y hacer un response en secure

switch (action) {
      case 'update':
        auth.check.own(req, owner) && response.success(req, res, `${req.body.name} editado`, 201)
        break
      default:
        next()

Alguien sabe como solucionar cuando el signature del web token es invalido?

En postman es un pel铆n diferente, aqu铆 los pasos:
A帽ado usuario
Hago el login y tomo el token
Voy a editar usuario
authorization > bearer token
pegar el token

luego en el body pegar el id que me creo en consola

Este profesor es uno de los mejores de Platzi seg煤n mi punto de vista.
Pero esta clase me mare贸.
La tuve que ver mas de 4 veces y prestando suma atenci贸n a los detalles, porque la verdad es que est谩 super confuso todo.

Hasta ahora me di cuenta que tenia problemas en nanoid

// Esto crea problemas de "nanoid is not a function"
const nanoid = require('nanoid')

// Lo que deben hacer es esto: 
const { nanoid } = require('nanoid')
// Ya que nanoid dentro de la dependencia si es una funcion


<code>


驴El error 鈥淣o puedes hacer esto鈥, no deber铆a devolverse como un error estandarizado de los definidos previamente en el response?

Excelente clase, para los que usan postman les recomiendo ver el aporte de Reinaldo Omar Mendoza Leal , muy 煤til, tneer en cuenta de copiar el id que aparece en el terminal para poder editar el usuario

Buen铆sima toda la parte de autenticaci贸n, un poco dif铆cil de seguir la clase para ser honesto porque el profe como que empieza desde el final y va resolviendo hasta llegar al inicio, una forma de desarrollo a la que no estoy habituado, no es mejor ni peor solo diferente, hay que adaptarse

驴C贸mo funciona el par谩metro next?

Muy buena clase, aunque tuve que verla 5 veces e incluso volver a ver las clases anteriores para entender lo que estaba haciendo el profesor y debuggear los errorres de mi c贸digo.

Si est谩n usando try/catchs y arrow functions, en el network.js de user tienen que llamar al middleware de la siguiente manera:

router.put('/', async (req, res) => {
    try {
        secure.checkAuth('update')(req);
        const user = await controller.upsert(req.body);

        response.success(req, res, user, 201);
    } catch (err) {
        response.error(req, res, err.message, 500)
    }
})

驴A que hace referencia el next()? 驴lo declaramos en algun lado y no me d铆 cuenta?

Impecable. C贸mo usar un Middleware propio como control de seguridad

si, muy buena clase, la ultima completa la anterior

Veo que secure(鈥榰pdate鈥) retorna una funci贸n, pero en que momento se ejecuta? se ejecuta autom谩ticamente al ser un middleware?

En mi caso me genero muchos problemas tener tantas funciones para decodificar el token y hacer la verificaci贸n; al final el token obtenido por el algoritmo de visto en este clase era diferente al original y me marcaba error de token invalido, si a alguien le pasa lo mismo puede omitir las funciones de decodificar el encabezado, obtener el token y verificar. En su lugar puede integrar todo en la funci贸n own en unas cuantas l铆neas:

const check = {
    own: function(req, id){   
        const token = req.headers.authorization.split(' ')[1]
        const decoded = jwt.verify(token, secret) 
        
        if (decoded.id !== id){
            throw new Error("No tienes permisos")
        }
    }
}

para los q usan POSTMAN, no aparece en la pesta帽a de Authorization la opcion bearer, asi q lo que deben hacer es,
en la pesta帽a de Header agregan un campo (key) Authorization y篓de Value colocan Bearer kjshjdshkjfds?tu?token?hjkhsdkjf

asi
Authorization Bearer sdfkjshdfkjshkjdshk

s煤per interesante la validaci贸n de tokens!!

s煤per interesante la validaci贸n de tokens!!