const config = require('../config/config');//подключаем конфиг
/**
* Возврощаем функцию
* @param email - куда будем отправлять письмо
* @returns {{to: *, from: string, subject: string, html: string}}
*/
module.exports = function(email){
return {
to: email,// - куда будем отправлять письмо
from: config.from,//от кого письмо
subject:'Аккаунт создан',//тема письма
//тело письма
html: `Добро пожаловать
вы успешно создали аккаунт - ${email}
Перейти в магазин
`
}
};
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 router = Router();//инициируем роутер
const transporter = nodeMailer.createTransport(sendGrid({//инициируем коннект с sendGrid, по токену
auth: {
api_key:config.send_grid_key//токен, его можно получить в самом сервисе
// , https://app.sendgrid.com/ -> setting->api_key, выбираем full
}
}));
/**
* Регистрация пользователя
* первый параметр адрес страницы, в данном случае используется префикс при регистрации ройтера,
* второй параметр callback - обработчик запроса req - request , запрос от браузера
* res - response, ответ сервера
*/
router.post('/register', async (req, res) => {
const {email, password, confirm, name} = req.body;//получить данные пользоватедя
const candidate = await User.findOne({email: email});//поиск пользователя с таким же email
if(password !== confirm){//Проверка пароля
req.flash('error', 'Пароль не совпадает');//сохроняем ошибку в сессию, с ключом error
res.redirect('/auth/login#register');//редирект на страницу регистрации
}
if(candidate){//если такой email уже зарегестрирован
req.flash('error', 'Такой email уже существует');//сохроняем ошибку в сессию, с ключом error
res.redirect('/auth/login#register');//редирект на страницу регистрации
}
else{
const hashPassword = await bcrypt.hash(password, 10);//Шифруем пароль
const user = new User({email, name, password:hashPassword, cart: {items:[]}});//создание пользователя
await user.save();//сохраняем запись
await transporter.sendMail(regMail(email));//отправить mail, Рекомендуется использовать после редиректов
res.redirect('/auth/login#login');
}
}
);
module.exports = router;//Экспортирум роутер