F Bad Request en Passport con estrategia local Solucion!!! - Samuel Castillo ▷ 【Frontend React developer Guatemala】【JavaScript, React, Node】

Bad Request en Passport con estrategia local Solucion!!!

Bad Request en Passport con estrategia local Solucion

 Bad Request en Passport con estrategia local Solucion!!!

El debugin puede ser hermoso o terrible si contamos con la informacion correcta. Desgraciadamente Passport no nos da toda la informacion que necesitamos. Bad Request es un bug comun cuando trabajas con cualquier estrategia, ya sea local o Twitter o Google. Ya sea que uses Insomina o Postman este error ni siquiera deja que ingrese a la ruta, hoy vamos a aprender una forma de solucionar el Bad Request en Passport. 

El problema 400 con Passport

Creas un proyectos de Node, agregas Express y creas unas rutas, decides usar Passport para la autenticacion, implemnetas una ruta para autenticar el usuario y ... Error 400 Bad Request.

Si intentamos hacer una verificacion para ver que esta mal. vemos que nunca se ejecuta la funcion de verificaion y que no nos da ningun dato sobre el problema.

Y este es el problema, existen tantas posibilidades de error que no saber que esta fallando es lo que complica todo el trabajo, para arreblar eso Dmitry Rogozhny, ha creado una libreria para corregir todos los errores al trabajar con Passport.

Solucion al problema

Este post no va de ayudarte a solucionar un error, es de como ayudarte a encontrar el error. Suena parecido pero son dos cosas diferentes.

Lo que vamos a hacer es hacer que en nuestra consola aparezca una explicacion detallada del error. Con esto sabremos que es lo que esta mal y poder consultar la documentacion para corregirlo.

Como encontrar el Bug 400 Bad request de Passport

// Importamos Passport y en mi caso la estrategia local.
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

// agregamos una nueva estrategia de verificacion.
passport.use(new LocalStrategy(
  // your verification logic goes here
  // this test verification function always succeeds and returns a hard-coded user
  function (username, password, done) {
    console.log("Verification function called");
    return done(null, { username, id: "1" });
  }
));

// serialize user object
passport.serializeUser(function (user, done) {
  done(null, user);
});

passport.deserializeUser(function (user, done) {
  done(err, user);
});

// Iniciar Passport y sus middlewares
app.use(passport.initialize());
app.use(passport.session());

// Creamos nuestra ruta de autenticacion
app.post('/my-login',
  function (req, res, next) {
    passport.authenticate('local', function (error, user, info) {
      console.log(error);
      console.log(user);
      console.log(info);

      if (error) {
        res.status(401).send(error);
      } else if (!user) {
        res.status(401).send(info);
      } else {
        next();
      }

      res.status(401).send(info);
    })(req, res);
  },
  function (req, res) {
    res.status(200).send('logged in!');
  });

CONVERSATION