Custom membership provider

У попередній частині уроку був створений метод CreateUser. який дозволив створювати користувачів в базі даних.

У цій частині ми додамо функцію генерації хешу і солі пароля.

Якщо коротко, для чого потрібні сіль і хеш.

Сіль же - це набір випадково згенерували символів, які додаються до паролю і хешіруются разом з ним. Разом з сіллю, розшифрувати такий пароль стає ще важче.

Для початку, зробимо генерацію солі.

Відкриємо UserRepository.cs і додамо посилання на System.Security.Cryptography:

Потім додамо зміна в метод CreateUser для того, щоб сіль зберігалася в базі даних:

Тепер реалізуємо метод генерації хешу. Додамо в UserRepository.cs наступний код:

Знову міняємо метод CreateUser. щоб в базі зберігався хешировать пароль. Для того, щоб код працював коректно, необхідно генерувати сіль перед хешированием, так як функція хешування використовує сіль.

Тепер можна зайнятися реалізацією ValidateUser.
Спочатку створимо метод ValidateUser в класі UserRepository

Тепер модифікуємо ValidateUser в MyMembershipProvider

Створимо уявлення, яке відображається відразу після реєстрації користувача.

Відкриємо HomeController.cs і додамо метод Welcome:

Тиснемо правою кнопкою по Welcome () і вибираємо Add View ...

Custom membership provider

У поданні створимо повідомлення для нових користувачів:

Тепер відкриваємо 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