IIC2513-2021-1 / projects

Repositorio oficial para los proyectos de ambas secciones del periodo 2021-1 del curso PUC IIC2513
14 stars 6 forks source link

[E2.1] Error Unauthorized #101

Open nicoguz opened 3 years ago

nicoguz commented 3 years ago

Hola! Estoy implementando los jwt para la autenticación de usuario. Seguí al pie de la letra la capsula, pero cuando intento ahcer log in con un usuario me arroja 401 Unauthorized. La ruta está arriba del comando de usar jwt. Luego de investigar un poco me dí cuenta que el código corre bien hasta llegar a un middleware que busca al usuario en la bd. Básicamente entra en la ruta no protegida, funciona bien, logra entrar al middleware pero al final del middleware tengo un return next();. Después de esto arroja el 401. Por qué ocurre esto? Debería dejarlo con un return '';?

Flujo del código:

Hago request a Post /auth

routes.js

/* Unprotected routes */
...
router.use('/auth', auth.routes());

/* Protected routes */
router.use(jwtVerifier({ secret: process.env.SECRET_KEY, key: 'authData' }));
router.use(setCurrentUser);
...

auth.js

...
const user = {
      username,
      password,
    };
    try {
      await getUser(user, ctx, next);
...

middlewares.js

async function getUser(user, ctx, next) {
  ctx.state.user = await ctx.orm.user.findOne({
    where: { username: user.username, password: user.password },
  });
  if (!ctx.state.user) return ctx.throw(404);
  return next();
}
humbertoortuzar commented 3 years ago

Creo que tu lo que pasa es que tu función getUser no necesita next. https://stackoverflow.com/questions/42532534/why-do-we-await-next-when-using-koa-routers https://stackoverflow.com/questions/55551939/in-koa-whats-the-difference-between-await-next-return-await-next-return Quizás estas preguntas y respuestas puedan ayudarte. Saludos!

sivicencio commented 3 years ago

Tu función getUser no es un middleware, sino un helper que crearon para obtener al usuario. Por lo tanto, no es necesario ni pasarle next ni tampoco llamarla.

nicoguz commented 3 years ago

Perfecto, ahí me quedo super claro, gracias!!