Инструменты пользователя

Инструменты сайта


nodejs:email:smena_parolja

смена пароля

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 //поле обязательно
                }
            }
        ]
    }
});
nodejs/email/smena_parolja.txt · Последние изменения: 2023/01/12 12:18 (внешнее изменение)