Estrategia Local

Passport strategy for authenticating with a username and password.

Passport-local

Este módulo le permite autenticar utilizando un nombre de usuario y contraseña en sus aplicaciones Node.js. Al conectarse a Passport, la autenticación local se puede integrar de forma sencilla y discreta en cualquier aplicación o framework que admita middleware de estilo Connect, incluido Express.

Uso de estrategias de Passport

Ahora vamos a definir las estrategias de Passport para manejar el inicio de sesión y la suscripción. Cada uno de ellos sería una instancia de la Estrategia de autenticación local de Passport y se crearía utilizando la función passport.use() .

Estrategia de acceso

La estrategia local se ve así:

auth/local/passport.js
/**
 * Auth Local passport configuration
 */

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

function localAuthenticate(User, email, password, done) {
  User.findOne({ email: email.toLowerCase() }).exec()
    .then((user) => {
      if (!user) {
        return done(null, false, {
          message: 'This email is not registered.',
        });
      }
      return user.authenticate(password, (authError, authenticated) => {
        if (authError) {
          return done(authError);
        }
        if (!authenticated) {
          return done(null, false, { message: 'This password is not correct.' });
        }
        return done(null, user);
      });
    })
    .catch(err => done(err));
}

function setup(User) {
  passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password', // this is the virtual field on the model
  }, (email, password, done) => localAuthenticate(User, email, password, done)));
}

module.exports = { setup };

El primer parámetro de passport.use() es el nombre de la estrategia que se utilizará para identificar esta estrategia cuando se aplique posteriormente, en nuestro caso no la usamos. El segundo parámetro es el tipo de estrategia que desea crear, aquí usamos el username-password o LocalStrategy. Debe tenerse en cuenta que, por defecto, LocalStrategy espera encontrar las credenciales de usuario en los parámetros de nombre de usuario usernameField y contraseña passwordField, pero también nos permite utilizar otros parámetros con nombre.

Seguidamente vamos a crear un archivo index.js dentro de la carpeta auth/local este archivo será la ruta para manejar login de nuestra aplicación.

auth/local/index.js
/**
 * Auth Local configuration
 */

const express = require('express');
const passport = require('passport');

const { signToken } = require('../auth.service');

const router = express.Router();

router.post('/', (req, res, next) => {
  passport.authenticate('local', (err, user, info) => {
    const error = err || info;
    if (error) {
      return res.status(401).json(error);
    }
    if (!user) {
      return res.status(404).json({ message: 'Something went wrong, please try again.' });
    }

    const token = signToken(user._id, user.role);
    return res.json({ token });
  })(req, res, next);
});

module.exports = router;

Nota: const { signToken } = require('../auth.service'); Esta función la construiremos en el siguiente paso.

Last updated