Как сбросить/изменить пароль в Node.js с помощью Passport.js?
Сброс/изменение паролей с помощью Passport.js — немного сложный процесс, но в этой статье вы научитесь делать это очень простым и понятным способом.
Синтаксис:
requiredUser.changePassword(oldpassword, newpassword, callback function)
где requiredUser — это пользователь, пароль которого мы хотим изменить.
Подход: мы собираемся использовать метод changePassword паспорта, который принимает два аргумента и функцию обратного вызова, первый аргумент — старый пароль, а второй аргумент — новый пароль.
requiredUser.changePassword(oldpassword, newpassword, function(err) { })
Реализация: Ниже приведена пошаговая реализация описанного выше подхода.
Давайте создадим простое приложение Node.js, которое использует паспорт для регистрации пользователей и сохранения их данных внутри MongoDB с помощью mongoose. Вы можете использовать все, что хотите для хранения данных пользователей, например, MySQL или простой массив. В этой статье мы будем использовать MongoDB.
Внутри этого приложения мы создали маршрут changepassword , который принимает входные значения от пользователей, такие как имя пользователя, старый пароль и новый пароль.
Шаг 1: Инициализирует NPM: создайте и найдите папку проекта в терминале и введите команду
npm init -y
Он инициализирует наше приложение узла и создает файл package.json.
Шаг 2. Установите зависимости. Найдите корневой каталог проекта в терминале и введите команду
npm install express body-parser mongoose passport passportLocalMongoose
Чтобы установить Express, Body Parser, Mongoose, Passport и Passport Local Mongoose в качестве зависимостей внутри вашего проекта.
Шаг 3: Создайте файл сервера: создайте файл «app.js», внутри этого файла потребуются все модули и создайте постоянное «приложение» для создания экземпляра экспресс-модуля, затем используйте mongoose для подключения к локальной базе данных MongoDB.
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 });
Шаг 4: Теперь инициализируйте паспорт , создайте схему пользователя, используйтеpassportLocalMongoose в качестве плагина к схеме пользователя и создайте константу пользователя , которая используется для создания экземпляра пользователя и сохранения его в базе данных MongoDB.
app.use(passport.initialize()); const userSchema = new mongoose.Schema({ username: String, password: String, }); userSchema.plugin(passportLocalMongoose); const User = new mongoose.model("User", userSchema);
Шаг 5: Теперь давайте сериализуем и десериализуем пользователя с помощью модуля паспорта.
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); }); });
Шаг 6: Создайте маршрут регистрации для регистрации пользователей и маршрут смены пароля , который принимает входные значения от пользователей, такие как имя пользователя, старый пароль и новый пароль.
app.get("/register", function (req, res) { res.sendFile("register.html", { root: __dirname }); }); app.get("/changepassword", function (req, res) { res.sendFile("changepassword.html", { root: __dirname }); });
Шаг 7: Теперь создайте маршрут регистрации для регистрации пользователя, используя метод регистрации паспорта, который принимает два параметра, имя пользователя и пароль, а также обратный вызов, который выдает сообщение об ошибке или успешном завершении.
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") } }); });
Шаг 8: Как мы уже видели в части подхода, мы должны сначала найти пользователя, пароль которого мы хотим изменить, затем использовать changePassword с двумя параметрами, старый пароль и новый пароль, и обратный вызов, который отправляет ошибку, если есть или отправить сообщение об успешном завершении.
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.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( 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); |
register.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 > |
изменить пароль.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 > |
Выход: