No tienes acceso a esta clase

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

Autenticación: login

9/29
Recursos

Aportes 32

Preguntas 6

Ordenar por:

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

Muy buenas clases! Gracias!
Una recomendación que no hace al funcionamiento pero ayuda a orientarse mejor respecto al archivo con el que estamos trabajando en cada momento, o localizar más rápidamente los errores, etc:
A cada archivo network, controller u otros que se vayan agregando a la app, agregarle el nombre del componente al cual pertence.
Por ejemplo:
en el caso del componente user: user-network.js, user-controller.js
En el caso de auth: auth-network.js, auth-controller.js
Esto ayuda también a localizarlo más rápidamente en la función de búsqueda del editor que usemos.
!! Obviamente el index.js queda como index.js para que pueda cumplir la función que explica el profesor =) !!

hace 4 meses deje este curso en esta clase porque no entendia nada me frustre y lo deje, hoy estoy aqui de nuevo, agarre fuerzas, volvi a ver el curso de node basico que lo dicta Carlos y ahora voy por este video entendiéndolo a la perfección.! 👍🏻

Recomiendo este paquete module-alias para cambiar

required('../../../auth')

por

required('@auth')

Me gusta más programar de este modo tipo Error First (debe tener otro nombre) pero siento que es más limpio porque te quita un montón de indexados de bloques. Si alguna validación no cumple retornas o lanzas excepciones, si no, sigues el flujo en el mismo nivel de indexado.

const data = await store.query(TABLA, { username: username });

if (data.password !== password) {
    throw new Error('Informacion invalida')
}
        
// Generar token;
return auth.sign(data);

Una clase epica!

tambien pueden generar el token mediante una promesa y añadiendole un tiempo de expiracion

const jwt = require('jsonwebtoken');

const generateJWT = (id) => {
    return new Promise((resolve, reject)=> {
         const payload = { id };
         jwt.sign(payload, 'secreto', {expiresIn: '1h'}, (err, token)=> {
            if(err){
                console.log(err.message);
                reject('No se pudo generar el token');
            }else{
                resolve(token);
            }
         });
    })
}

module.exports = generateJWT;

Una duda, lo único es que al generar el token de acceso, le estamos pasando data del usuario y con ello la contraseña, eso no sería buena práctica no?

La contraseña debería ir en el token? una vez autenticado en el back, por que necesitaría enviar la contraseña en el token?

Mucha repetición de nombres genéricos en carpetas y archivos. realmente confuso

IMPORTANTE SABER ESTO SI NO USAS bodyParser:

app.use(express.urlencoded({extended: true})) //* Así ya no tenemos que instalar body-parser
app.use(express.json()) //! Pero es importante usar esta línea también

Estuve muchas horas atorado por no saber que tenía que usar la segunda línea.

que clase de nivel…

Excelente clase!

No se como ustedes ven el curso, pero yo lo veo un poco mal hecho, o es mi forma de ver las cosas o complica mucho las cosas con la clase dummy? , aparte que creo el modo de enseñar es un poco raro porque va haciendo las cosas de algún lado que creo va copiando porque algunas veces se equivoca en los nombres de las variables, aparte que los nombres de los archivos como network queda un poco extraño , tambien las variables en ingles y español me crean una confusion muy grande, soy le único que lo ve asi?..
por ejemplo tambien la variable col, ?? columna?
q de query?? o por que q?

Yo a mi codigo le estoy agregando boom para hacer mas dinamicas las respuestas del backend y en la parte del login hice esta validacion:

  async function login(username, password) {
    const data = await store.query(TABLE, { username: username });
    // validate username exists
    if (!data || data.length === 0) {
      throw boom.unauthorized();
    }
    if (data.password === password) {
      // Generate token
      return auth.sign(data)
    }
    else {
      throw boom.forbidden();
    }
  }

Si el username no es encontrado entonces retorno 401 con el siguiente request:

{
    "Error": true,
    "ResponseMetadata": {
        "HTTPHeaders": {
            "date": "Mon, Aug 7, 2023, 11:47:46 PM GMT-4"
        },
        "HTTPStatusCode": 401
    },
    "Body": {
        "error": "Unauthorized",
        "message": "Unauthorized"
    }
}

Alguno sabe como hago para que cuando me imprima el body del usuario nuevo me incluya el password, para luego poder comparar este y generar el token.

Alguien me podria ayudar no logre entender mucho de esta clase y ya la e visto como 4 veces , hay pasos que no entiendo muy bien que son igual en el codigo estoy muy perdido

Si quieren ver más acerca de la documentación del paquete de JWT, les dejo el siguiente link, está increíble👍👍 : https://www.npmjs.com/package/json-web-token

muy buena clase.

Excelente clase. JWT es una herramienta muy buena yo la he usado con angular

exelente

que gran claseee, me re abrió la mente esto de JWT jajaja

No te compliques la vida, solo tienes un parametro! ajaja

Auth/index.js

const jwt = require('jsonwebtoken');

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

module.exports = {
    sign,
}

/api/components/auth/controller.js

    async function login(username, password) {
        //defining where is the dat a coming
        const data = await store.query(TABLA, { username: username })
        console.log(data, 'auth controller');
        if (data.password === password) {
            // generate token
            return auth.sign(data);
        } else {
            throw new Error('Invalid information')
        }
    }```

Una pregunta por que el uso throw new Error y no Promise.reject? gracias

Crear token con JWT

¯\_(ツ)_/¯

Creo que para usar jsonwebtoken se debe instalar primero con npm, por eso tenía un error.

<code>npm i jsonwebtoken

alguien sabe porque esto falla ?

    async function login(username, password){
        const data = await store.query(TABLA, { username: username });
        if (data.password === password) {
            // Generar token;
            return 'TOKEN' 

        }else{
            throw new Error('Información invalida')
        }

data.password = 1234
pasword = 1234

en npm no confundir jwt con jsonwebtoken

Se me ocurrió este código para poder hacer un query que permite buscar múltiples campos,

const DB = {
    user: [
        {
            id: 1,
            age: 12,
            name: "Jorge",
        },
        {
            id: 2,
            age: 123, 
            name: "Mendez",
        },
        {
            id: 3,
            age: 124,
            name: "Ortega",
        },
    ],
};


const query = (tabla, findeQuery) => {
    const QUERY = Object.entries(findeQuery);
    const DATA = DB[tabla];
    const REQUEST = QUERY.map(data => {
        const [key, value] = data;
        return DATA.find(item => item[key] === value);
    }).filter((value, index, current) => current.indexOf(value) === index);
    return REQUEST[0];
 };

finder("user", { id: 1, name: "jorge"});


se que no es la mejor solución, pero espero les sirva

vole 😃