No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Autenticación: gestión de permisos

11/29
Recursos

Aportes 19

Preguntas 2

Ordenar por:

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

Ojito Ojito… en el video logró hacer el PUT porque el lo creo por SU propia cuenta cuando nos dejó el reto de que lo crearamos nosotros …

REVISA LA DOCUMENTACION DE LA CLASE PARA VER COMO LO HIZO

EN => API/COMPONENT/USER/NETWORK

Funciones anónimas complican el debug, funciones con nombres facilitan la vida. Sabias palabras del prof… 😃

Es más fácil hacer revisión de fallos cuando las funciones tienen nombres, que cuando son fuciones anónimas.

Se me hace muy rebuscada la manera de programar que tiene el profesor.

Hasta este punto del curso me parece mucho mejor explicado los mismos temas y más sencillo de entender en los cursos de Nicolas Molina.

No tengo muy claro como el middelware de secure.js, entra en ejecución, no veo que en ningun momento que lo llamen o lo importen, alguien me puede decir; ¿como entra a ejecutarse este archivo si nada lo esta llamando?

de donde viene la función next() ? se que ejecuta la siguiente función (creo…) pero no explico o no me escuche de donde, es propia de Node ?

middleware = intermediario

Aqui tambien se abarca el tema de autenticacion con tokens en los headers: <https://fullstackopen.com/en/part4/token_authentication#limiting-creating-new-notes-to-logged-in-users>
```js export async function upsert(table, data) { if (!db[table]) { db[table] = []; } if (data.id) { let row = db[table].filter(item => item.id === data.id)[0] if (row != null) Object.assign(row, data) } db[table].push(data); }; ```
Dado que en el videos se aborda el tema de los middleware, acá una referencia sobre el tema: <https://expressjs.com/es/guide/using-middleware.html>

que es Bearer???

Todo el contenido es muy bueno, así como la explicación pero la estructura y el nombre que se le ponen a los archivos me parece confusa. Sí yo quiero buscar un middleware de autenticación, jamas se me ocurriria irlo a buscar en user/secure. Yo más bien lo pondría en middlewares/auth.middleware.js

Autenticación: gestión de permisos

Creamos user/secure.js:

const auth = require('../../../auth');

module.exports = function checkAuth(action) {
  function middleware(req, res, next) {
    switch (action) {
      case 'update':
        const owner = req.body.id;
        auth.check.own(req, owner);
        break;
      default:
        next();
        break;
    }

    return middleware;
  }
}

Actualizamos ./auth/index.js:

const { header } = require('express/lib/request');
const jwt = require('jsonwebtoken');
const config = require('../config');

const secret = config.jwt.secret;

function sign(data) {
  return jwt.sign(data, secret);
}

function verify(token) {
  return jwt.verify(token, secret);
}

const check = {
  own: function(req, owner) {
    const decoded = decodeHeader(req);
    console.log(decoded);
  }
}

function getToken(auth) {
  if (!auth) {
    throw new Error('¡No viene token!');
  }

  if (auth.indexOf('Bearer ') === -1) {
    throw new Error('¡Formato inválido!');
  }

  let token = auth.replace('Bearer ', '');

  return token;
}

function decodeHeader(req) {
  const authorization = req.headers.authorization || '';
  const token = getToken(authorization);
  const decoded = verify(token);

  req.user = decoded;

  return decoded;
}

module.exports = {
  sign
}

Actualizamos ./config.js:

module.exports = {
  api: {
    port: process.env.API_PORT || 3000,
  },
  jwt: {
    secret: process.env.JWT_SECRET || 'notASecret!'
  }
}

a alguien más le pasa que cuando le hablan de middleware no tiene idea de que es lo que hablan ?
Alguien me lo podría explicar en palabras muy simples? 😦

Tip de funciones anónimas vs funciones normales

Ok, Muy interesante

decode Token

Aunque en el router deberia ir una ruta con un params id como esta:

router.put('/:id', upsert);

ya que el profesor definió las siguientes:

router.post('/', upsert); router.put('/', upsert);

para respetar estas rutas tuve que adaptar en el “store/dummy.js” el metodo upsert para que permita editar tomando en cuenta que el id (en este caso) vendria desde el body.

async function upsert(tabla, data) {
    if (!db[tabla]) {
        db[tabla] = [];
    }

    for (let i = 0; i < db[tabla].length; i++) {
        if(db[tabla][i].id === data.id){
            db[tabla][i] = data;
            return;
        }
    }
     db[tabla].push(data);
    console.log(db);
}