У попередній частині уроку був створений метод CreateUser. який дозволив створювати користувачів в базі даних.
У цій частині ми додамо функцію генерації хешу і солі пароля.
Якщо коротко, для чого потрібні сіль і хеш.
Сіль же - це набір випадково згенерували символів, які додаються до паролю і хешіруются разом з ним. Разом з сіллю, розшифрувати такий пароль стає ще важче.
Для початку, зробимо генерацію солі.
Відкриємо UserRepository.cs і додамо посилання на System.Security.Cryptography:
Потім додамо зміна в метод CreateUser для того, щоб сіль зберігалася в базі даних:
Тепер реалізуємо метод генерації хешу. Додамо в UserRepository.cs наступний код:
Знову міняємо метод CreateUser. щоб в базі зберігався хешировать пароль. Для того, щоб код працював коректно, необхідно генерувати сіль перед хешированием, так як функція хешування використовує сіль.
Тепер можна зайнятися реалізацією ValidateUser.
Спочатку створимо метод ValidateUser в класі UserRepository
Тепер модифікуємо ValidateUser в MyMembershipProvider
Створимо уявлення, яке відображається відразу після реєстрації користувача.
Відкриємо HomeController.cs і додамо метод Welcome:
Тиснемо правою кнопкою по Welcome () і вибираємо Add View ...
У поданні створимо повідомлення для нових користувачів:
Тепер відкриваємо AccounController.cs. знаходимо метод Register і видаляємо FormService.SignIn. Він повинен виглядати так:
Модифікуємо метод CreateUser (знову!) Так, щоб ключ зберігався в базі.
Тепер, коли ключ генерується, потрібно його якось відправляти користувачеві. Так як урок не великий, ми напишемо код для роботи з поштою прямо в класі UserRepository. У реальних додатках, швидше за все необхідно буде відокремити цю логіку в окремий клас.
Знадобитися SMTP сервер, який дозволить відправляти пошту. Якщо додаток знаходиться на хостингу, то, як правило, там вже є свій SMTP сервер, який можна використовувати. Для тестування роботи на локальному комп'ютері, можна використовувати який-небудь поштовий сервіс типу gmail або mail.ru
Додамо посилання на System.Net.Mail в UserRepository.cs
У метод CreateUser додамо наступний код:
Замість PORT потрібно підставити номер порту, на якому працює ваш додаток або видалити зовсім, якщо воно працює на хостингу. Також необхідно замінити значення EMAIL_FROM, SERVER, USERNAME, PASSWORD на власні.
Якщо під час реєстрації з'являється наступне виняток
Тепер реалізуємо саму активацію.
Відкриємо AccounController.cs і додамо туди код:
Нарешті, створимо метод ActivateUser в UserRepository
Тепер потрібно виправити ValidateUser в UserRepository. щоб він аутентифицироваться тільки активованих користувачів.
Оновлений проект можна скачати тут CustomRoleAndMembership.zip