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
Introducción al proyecto del curso y su arquitectura
Arquitectura de un backend complejo
Estructuras de datos para nuestro proyecto
Creando la estructura principal
Estructura inicial del proyecto: API y rutas
Aislar el código de la base de datos
Rutas para usuarios
Documentación de nuestra API
Autenticación basada en tokens
JWT: Gestión de acceso
Autenticación: registro
Autenticación: login
Autenticación: cifrar contraseñas para evitar problemas de seguridad
Autenticación: gestión de permisos
Comprobar verificación con token
Gestión avanzada de errores: Throw
Almacenando datos: MySql
Base de datos real: MySQL
Completando la base de datos
Relacionando entidades: follow
Posts y likes
Microservicios en Node
Microservicios: pros y contras
Separando la base de datos a un microservicio
Conectando con nuestro microservicio de datos
Separando los posts a un microservicio
Gestión de microservicios con PM2
Puesta en producción serverless
Microservicios en Zeit Now, serverless y seguridad
Variables de entorno en Now y despliegue local
Cacheando nuestra aplicación
Caché como un microservicio. Redis
Conectando el microservicio a Redis
Conectar la API al caché
Puesta en producción en virtual machine
Desplegando los servicios de Node
Nginx como proxy inverso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Carlos Hernández
Aportes 19
Preguntas 2
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
que es Bearer???
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);
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?