імейли
відправляти повідомлення на мило будемо у 2 випадках.
при реєстрації велкам меседж
запит на відновлення паролю
Необхідно створити два роути у файлі authRoutes.js
перший знаходитиме імейл в базі і відправлятиме на нього тимчасовий пароль для відновлення основного пароля
другий роут ща отриманим тимчасовим паролем буде оновлювати основний пароль
частина береться з юзер сервіс отримання юзера по імейлу
тепер пропишемо контролер:
в юзер модел пропишемо ще один метод
розберемо код. спрочатку за допомогою crypto ми генероуємо рандомне число на 32 байти, і преводимо у шістнадцятковий рядок. (так званий скидочний токен для пароля саме його далі ми будемо переселати в імейлі для юзера)
створимо метод passwordResetToken де createHash - вказує алгоритм шифрування, update - що саме оновимо, digest - шістнадцятковий код.
У методі passwordResetExpires - ми генеруємо дату і збільшуємо її на 10 хвилин.
тобто в контролер повертається згенерований токен, а в базу даних запишеться захешований(це прописано в контролері).
а також додамо два поля в нашу модель. тут зуде зберігатися захещований токен на скидання паролю і дата до якої він діє
ТОБТО НАЗОВНІ МИ ВІДДАВАТИМЕМО НЕЗАХЕЩОВАНИЙ ТОКЕН, А В БАЗІ БУДЕМО МАТИ ЗАХЕШОВАНИЙ
-------------
етпер напишемо бзерсервіс на скидання паролю
не забуваємо заімпортувати крипто
пописуємо контролер
На цьому етапі код має вже працювати тільки поки що без відправки імейлів
і передамо в боді обʼєкт імейла користувача який нібито защубив пароль
отримаємо наш респонс
перевіримо в базі даних, зо у нас зїявилися нові поля
а в консолі у нас виявився інший токен
це по суті хеши одного і того самого токена
прим. якщо в боді передати неіснуючий імейл, т буде те саме повідомлення
Тепер треба перевірити токен
той токен, який прийшов в консолі для відноавлення для імейра використаємо для перевірки перезапису пароля
і передаємо обʼєкт з пародем
отримуємо респонс
Після цього перевіримо базу даних переконаємося, що тимчасовий токен видалено, час його дії видалено і пароль помінявся
Тепер перевіримо чи можна задогінитись із цим логіном і новим паролем. пост запит
і в боді передамо
ів респонсі отримаємо вебтокен, тобто зміна пароля спрацювала
НАЛАШТУВАННЯ РОЗСИЛКИ ЧЕРЕЗ ІМЕЙЛ
nodemailer конфігурує те, що ми будемо вірпавляти в коді
прописуємо цей функціонал і контролерах
ctreateTransport - це метод конфігурування двіжка
service - налаштовує конфігурацію сервісу рохсилки
auth - на сервісі з якого буде проводитися розсилка треба буде авторизуватися
Це приклад вище, але ми налаштуємо зараз інакше вручну:
хост і порт будемо брати із сервісі mailtrap паролі і доніг до цього сервіса звичайно будемо зберігати в енвайромент
Налаштовуємо безпосередньо сам імейл
відповідно вище ми маємо визначити лінку скидання цього імейла
req.protocol - тут треба вказувати протокол саме фронтенда (буває що фронтенд і бекенд на різних серверах), бо відкриватиметься посилання на фронті
req.get('host') а тут вказується зост на бекенд. в результаті треба слідкувати уважно за цими двома параметрами, зоб вони працювали.
після всіх цих операцій ми вже можемо відправити імейл
у нього два редими розробки. 1 реальний 2. тестовий, коли всі імейои будуть відправлятися на один тестовий імейл
мейдтрап будемо використовувати саме для параметрів налаштування
Спочатку треба залогінитися (можна використати пароль гітхаб чи гугл)
після авторизації вибираємо email testing - inboxes - my inbox - smtp settings. У меню інтернацій треба вибрати nodemailer.
тут якраз і береться хост і порт для програми, що ми вписали раніше.
також тут вказуються логін і пароль для авторизації які потрібно прописати в енвайромент
наприклад такі дані
Тепер спробужмо знову подати запит на скидання паролю відправивши пост запит із обʼєктом з імейлом
після цього в нашому мейлтрап ми отримаємо повідомлення
це посилання має бути сформоване для фронтенда, а знаючи отриманий код ми вде потім на фронті сформуємо запит на скидання паролю.
Але імейли ніхто не відправляє в чисто текстовому варіанті, а роблять у форматі оформленої вестки далі розберемо формування верстки.
ДЛЯ ФОМУВАННЯ ВЕРСТКИ ІМЕЙЛУ ВИКОРИСТАЄМО ТЕМПЛЕЙТИ
будемо фромувати html. імейди досі верстаються таличною версткою
і також скористаємося корвертором HTML В PUG
вставивши виществорену верстку сюжи можна зненерувати паг вестку
у папці views створимо папку emails a в ньому файл hello.pug куди і вставимо згенерований наш паг листа
всередині створимо папку layout і винесемо в неї стилі з нагошо імейл листа у файл _style.pug
всі стилі відповідно виносимо у цей файл і зберігаємо і потім шмпортуємо їх в base.pug командою include _style
також в layout створимо файл base.pug і весь код перекидаємо в нього забравщи коментарі
і вкінці знак пробіла має бути такий td (і напочатку td - так само. Це треба зробити бо інакще поламається верстка)
після цього потрібно витягнути основний контент (вирізати), а замість нього написати block content
при цьому цей фрагмент покласти в hello.pug
(прим, щоб красиво оформити можна встановити плагін pug beautify)
Таккод створимо файл passwordreset.pug і закинемо в нього такий само темплейт
тільки треба дописати
extends layout/base
block content
Змінні можна з бекенда передати #{name_of_var}
але там де passwordreset.pug внесемо інше урл (для скиання пароля.)
також там де сабджект будемо передавати назву сабджекта
на цьому етапі ми підготували шаблони, Щоб відправляти
ТЕПЕР НАПИТЕМО СЕРВІС ВІДПРАВКИ ІМЕЙЛІВ
у файлі emailService.js
поставимо пакет
Винесемо імейл від якого вілправлятиметься сервіс в енвайромент
НАПИШЕМО КЛАС ДЛЯ ІСЕЙЛ РОЗСИЛКИ
прикрутимо цей сервіс до signup (в аусконтролерс)
і так само повідомлення на фогот пасфорд прикрутимо
Тепер перевіримо пост запит
відправимо в боді
якщо це новий кормтсувач, то його має зареєструвати і додати в базу даних І ПРИЙТИ ПОВІДОМЛЕННЯ НА ПОШТУ!!!!
SENDGRID
email api - integration guide
вибираємо SMTP RELAY
створюємо ключ і параметри вставляємо в енвайромент
а в імейл сервісі дописуємо метод
це по суті наш конфіг під продакшн там тільки треба перевірити якщо завантадився енвайромент production
налаштування settings - sender authentication
і проходимо верифікацію імейла сендера юзера
Verify an Address
цей сервіс генерує тимчасові недовготривалі імейли саме доя випалків тестування
аможна і на своєму власному імейлі. створюємо пост запит нового користувача він має додатися в базу, а на вказаний імейл має прийти повідомленя про реєстрацію
Якшо лист прийшов на пошту, то значить сервіс працює і можна його підтвердити що він працює. Ждя цього заходимо email api - integration guide
вибираємо SMTP RELAY
внизу натискаємо галочку і вибираємо веріфай інтегрейшн (якщо не закрили попрееднб стоірнку)
Last updated