¿Cómo restablecer/cambiar la contraseña en Node.js con Passport.js?

Restablecer/cambiar contraseñas con Passport.js es un proceso un poco complejo, pero en este artículo aprenderá a hacerlo de una manera muy fácil y comprensible.

Sintaxis:

requiredUser.changePassword(oldpassword, 
    newpassword, callback function)

donde el usuario requerido es el usuario cuya contraseña queremos cambiar.

Enfoque: Vamos a utilizar el método de cambio de contraseña de pasaporte que toma dos argumentos y una función de devolución de llamada, el primer argumento es la contraseña anterior y el segundo argumento es la nueva contraseña.

requiredUser.changePassword(oldpassword, 
    newpassword, function(err) {
    
})

Implementación: A continuación se muestra la implementación paso a paso del enfoque anterior.

Vamos a crear una aplicación Node.js simple que use el pasaporte para registrar usuarios y guardar sus datos dentro de MongoDB usando mongoose. Puede usar lo que quiera para almacenar los datos de los usuarios, como MySQL o una array simple. En este artículo, vamos a utilizar MongoDB.

Dentro de esta aplicación, hemos creado una ruta de cambio de contraseña que toma valores de entrada de los usuarios, como nombre de usuario, contraseña anterior y contraseña nueva.

Paso 1: Inicializa NPM: crea y localiza la carpeta de tu proyecto en la terminal y escribe el comando

npm init -y

Inicializa nuestra aplicación de Node y crea un archivo package.json.

Paso 2: Instale las dependencias: ubique el directorio de su proyecto raíz en la terminal y escriba el comando

npm install express body-parser mongoose passport passportLocalMongoose

Para instalar Express, Body Parser, Mongoose, Passport y Passport Local Mongoose como dependencias dentro de su proyecto.

Paso 3: Crear archivo de servidor: Cree un archivo ‘app.js’, dentro de este archivo se requieren todos los módulos y cree una ‘aplicación’ constante para crear una instancia del módulo express, luego use mongoose para conectarse con la base de datos MongoDB local.

const express = require('express')
const bodyParser = require('body-parser')
const mongoose = require("mongoose");
const passport = require("passport");
const passportLocalMongoose 
    = require("passport-local-mongoose");

const app = express();

mongoose.connect(
"mongodb://localhost:27017/passport-forget", {
   useNewUrlParser: true
});

Paso 4: ahora inicialice el pasaporte, cree un esquema de usuario, use pasaporteLocalMongoose como un complemento para el esquema de usuario y cree una constante de Usuario que se usa para crear una instancia de Usuario y guardarla dentro de la base de datos MongoDB.

app.use(passport.initialize());
const userSchema = new mongoose.Schema({
   username: String,
   password: String,
});
userSchema.plugin(passportLocalMongoose);
const User = new mongoose.model("User", userSchema);

Paso 5: Ahora, vamos a serializar y deserializar al usuario usando el módulo de pasaporte.

passport.use(User.createStrategy());
passport.serializeUser(function (user, done) {
  done(null, user.id);
});
passport.deserializeUser(function (id, done) {
  User.findById(id, function (err, user) {
      done(err, user);
  });
});

Paso 6: cree una ruta de registro para registrar usuarios y una ruta de cambio de contraseña que tome valores de entrada de los usuarios, como nombre de usuario, contraseña anterior y contraseña nueva. 

app.get('/register', function (req, res) {
   res.sendFile('register.html', {
       root: __dirname
   });
});

app.get('/changepassword', function (req, res) {
   res.sendFile('changepassword.html', {
       root: __dirname
   });
});

Paso 7: Ahora, cree una ruta de registro para registrar al usuario utilizando el método de registro de pasaporte que toma dos parámetros, nombre de usuario y contraseña, y una devolución de llamada que arroja un mensaje de error o éxito.

app.post('/register', function (req, res) {
   User.register({
       username: req.body.username
   }, req.body.password, function (err) {
       if (err) {
           res.send(err);
       } else {
           res.send('successfully registered')
       }
   });
});

Paso 8: Como ya vimos en la parte de enfoque, primero debemos encontrar al usuario cuya contraseña queremos cambiar, luego usar changePassword con los dos parámetros, la contraseña anterior y la nueva contraseña, y una devolución de llamada que envía un error si hay alguno o envía un mensaje de éxito.

app.post('/changepassword', function (req, res) {
   User.findByUsername(req.body.username, (err, user) => {
       if (err) {
           res.send(err);
       } else {
           user.changePassword(req.body.oldpassword, 
           req.body.newpassword, function (err) {
               if (err) {
                   res.send(err);
               } else {
                   res.send('successfully change password')
               }
           });
       }
   });
});

Código completo:

aplicación.js

Javascript

const express = require('express')
const bodyParser = require('body-parser')
const mongoose = require("mongoose");
const passport = require("passport");
const passportLocalMongoose 
    = require("passport-local-mongoose");
  
mongoose.connect(
"mongodb://localhost:27017/passport-forget", {
    useNewUrlParser: true
});
  
const app = express()
  
app.use(passport.initialize());
  
const userSchema = new mongoose.Schema({
    username: String,
    password: String,
});
  
userSchema.plugin(passportLocalMongoose);
  
const User = new mongoose.model("User", userSchema);
  
passport.use(User.createStrategy());
  
passport.serializeUser(function (user, done) {
    done(null, user.id);
});
  
passport.deserializeUser(function (id, done) {
    User.findById(id, function (err, user) {
        done(err, user);
    });
});
  
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}))
  
app.get('/register', function (req, res) {
    res.sendFile('register.html', {
        root: __dirname
    });
});
  
app.get('/changepassword', function (req, res) {
    res.sendFile('changepassword.html', {
        root: __dirname
    });
});
  
app.post('/register', function (req, res) {
    User.register({
        username: req.body.username
    }, req.body.password, function (err) {
        if (err) {
            res.send(err);
        } else {
            res.send('successfully registered')
        }
    });
});
  
app.post('/changepassword', function (req, res) {
    User.findByUsername(req.body.username, (err, user) => {
        if (err) {
            res.send(err);
        } else {
            user.changePassword(req.body.oldpassword, 
            req.body.newpassword, function (err) {
                if (err) {
                    res.send(err);
                } else {
                    res.send('successfully change password')
                }
            });
        }
    });
});
  
  
app.listen(3000);

registro.html

HTML

<!DOCTYPE html>
<html lang="en">
    
<head>
    <title>Document</title>
</head>
<body>
    <form action="/register" method="post">
        <input type="text" 
            placeholder="Username" name="username">
        <input type="password" 
            placeholder="Password" name="password">
        <button type="submit">Register</button>
    </form>
</body>
    
</html>

cambiarcontraseña.html

HTML

<!DOCTYPE html>
<html lang="en">
    
<head>
    <title>Document</title>
</head>
    
<body>
    <form action="/changepassword" method="post">
        <input type="text" placeholder="Username"
            name="username">
        <input type="password" 
            placeholder="Old Password" 
            name="oldpassword">
        <input type="password" 
            placeholder="New Password" 
            name="newpassword">
        <button type="submit">
              Change Password
         </button>
    </form>
</body>
    
</html>

Producción:

 

Publicación traducida automáticamente

Artículo escrito por devaadi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *