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 28

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Comentarios importantes a este punto:

  • En el replace de Bearer se esta haciendo como replace(“Bearer”, “”) 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 “qwerty12345” al servidor va a llegar como “Bearer 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 “record”. 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)
  }
}

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

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()
}

ami me crea otro usuario

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

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()

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.

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)
    }
})

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

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 “No puedes hacer esto”, no debería devolverse como un error estandarizado de los definidos previamente en el response?

Capo!

Como opinion personal, veo que a muchos les parece muy buena la metodologia del profesor, pero en lo personal creo que es terrible su metodologia, el dice que todo va a ser paso a paso en una secuencia ordenada, pero la realidad es que todo se lleva de manera desordenada. a este punto del curso ustedes mismos pueden comprobar que nisiquiera lo que el ha mostrado al final en insomnia, funciona como deberia ser. aunque según el sí.
Afortunadamente este curso es viejo y platzi lo actualizó en parte con la trilogia del profesor Nicolas Molina, esa si me parece muy ordenada la secuencia del curso, ademas que explica claramente de donde y porque se utiliza cada cosa.

muy mal profesor la verdad, el contenido del curso pudo llevarse de una mejor manera hasta este punto

Si les sale el error de cant read(‘authorization’)
en Postman agreguen un req;

const authorization = req.req.headers.authorization || ‘’;

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?

¿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

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

Veo que secure(‘update’) 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")
        }
    }
}

súper interesante la validación de tokens!!

súper interesante la validación de tokens!!