=====смена пароля=====
**routes/auth.js**
const {Router} = require('express');//модуль express
const bcrypt = require('bcryptjs');//Модуль шифрования
const User = require('../models/user');//модель пользователя
const nodeMailer = require('nodemailer');//mailer
const sendGrid = require('nodemailer-sendgrid-transport');//Транспорт для mailer
const config = require('../config/config');//конфигурация
const regMail = require('../emails/registration');//конфигурация для почтовой рассылки
const resetMail = require('../emails/reset');//конфигурация для почтовой рассылки
const crypto = require('crypto');//Встроеннная в node.js криптографическая библиотека
const router = Router();//инициируем роутер
/**
* Смена пароля
* первый параметр адрес страницы, в данном случае используется префикс при регистрации ройтера,
* второй параметр callback - обработчик запроса req - request , запрос от браузера
* res - response, ответ сервера
*/
router.post('/password', async (req, res) => {
const {password,confirm, token, userId} = req.body;//данные из формы
if(password !== confirm){//сравниваем поля с паролем
req.flash('error', 'Пароли не совпадают');//сообщение об ошибке
return res.redirect('/auth/password/'+token);//редирект на туже страницу
}
const user = await User.findOne({//поиск пользователя
_id: userId,//id пользователя
resetToken: token,//token
resetTokenExp: {$gt: Date.now()}//Дата больше текущей иначе ссылка просрочена
});
if(user){//Пользователь найден
user.password = await bcrypt.hash(password, 10);//Шифруем пароль, 10 - соль
user.resetToken = undefined;//обнуляем поля, нужны были тока для защиты формы от взлома
user.resetTokenExp = undefined;//обнуляем поля, нужны были тока для защиты формы от взлома
user.dtCreate = undefined;//обнуляем поля, нужны были тока для защиты формы от взлома
user.save();//Сохраняем измеинения в таблице User
return res.redirect('/auth/login#login');//Редирект на страницу авторизации
}
else{//пользователь не найден или истекло время жизни token
req.flash('error', 'Время жизни token истекло');//сообщение об ошибке
res.redirect('/auth/login#login');
}
});
module.exports = router;//Экспортирум роутер
**models/user.js**
const {Schema, model} = require('mongoose');//подключаем из библиотеки монго,модульсоздания схемы - Schema,
// и модуль регистрации моделей - model
/**
* Схема пользователя
*
* В табличке пользователя сразу встраиваем корзину
* @type {*|Mongoose.Schema}
*/
const userSchema = new Schema({
email: {//email
type: String,
required: true
},
name: { //Имя пользователя
type: String, //строка
},
password: { //Имя пользователя
type: String, //строка
required: true //поле обязательное
},
resetToken:String,//токен для восстановления пароля
resetTokenExp: Date,//время жизни токен
dtCreate: Date,
cart: { //Корзина
items: [ //Позиции
{
count: { //колличество заказанных одинаковых курсов
type: Number, //тип число
required: true, //поле обязательно
default: 1
},
courseId: {
type: Schema.Types.ObjectId, //тип ObjectId
ref: 'Course', //связка с models/course.js
required: true //поле обязательно
}
}
]
}
});