Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
emails/registration.js
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: `<h1>Добро пожаловать</h1> <p>вы успешно создали аккаунт - ${email}</p> <hr> <a href="${config.base_url}"> Перейти в магазин</a> ` } };
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;//Экспортирум роутер