No tienes acceso a esta clase

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

Autenticaci贸n: login

9/29
Recursos

Aportes 31

Preguntas 6

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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?

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!

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鈥疨M GMT-4"
        },
        "HTTPStatusCode": 401
    },
    "Body": {
        "error": "Unauthorized",
        "message": "Unauthorized"
    }
}

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?

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 馃槂