| Четверг, 16 мая, 2013
Метки: ASP.NET MVC, SimpleMembership Комментарии: 0
Теперь реализуем, собственно, возможность отсылки письма на e-mail пользователя с временной ссылкой для изменения пароля. Добавляем ссылку для восстановления пароля на странице авторизации пользователя.
Код ссылки:
<p> @Html.ActionLink("Recover", "ForgotPassword") if you forgot your password. </p>
Ссылка перенаправляет пользователя на метод действия, который нужно добавить в контроллер AccountController.
[AllowAnonymous] public ActionResult ForgotPassword() { return View(); }
И добавим в папку Views/Account новое представление ForgotPassword.cshtml.
@{ ViewBag.Title = "Forgot Password"; } <h2>Forgot Password</h2> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <fieldset> <legend>Forgot Password Form</legend> <ol> <li> @Html.Label("User Name", new { @for = "UserName" }) @Html.TextBox("UserName") <span style="color:red;">@TempData["Message"]</span> </li> </ol> <input type="submit" value="Recover" /> </fieldset> }
Обратите внимание на три вещи, в Html.Textbox указано имя UserName. Элемент span выводит сообщения красным цветом, и имя пользователя отправляется post-запросом.
Ниже метод действия, который принимает данные от страницы:
[HttpPost, AllowAnonymous, ValidateAntiForgeryToken] public ActionResult ForgotPassword(string UserName) { // проверяем существование пользователя var user = Membership.GetUser(UserName); if (user == null) { TempData["Message"] = "User Not exist."; } else { // генерируем маркер пароля var token = WebSecurity.GeneratePasswordResetToken(UserName); // создаем урл с маркером пароля var resetLink = "Reset Password"; // получим e-mail прользователя UsersContext db = new UsersContext(); var email = db.UserProfiles.Where(x => x.UserName == UserName).Select(x => x.Email).FirstOrDefault(); // отсылаем email string subject = "Password Reset Token"; string body = "Please find the Password Reset Token
" + resetLink; try { SendEmail(email, subject, body); TempData["Message"] = "Mail Sent."; } catch (Exception ex) { TempData["Message"] = "Error occured while sending email." + ex.Message; } // это для тестирования TempData["Message"] = resetLink; } return View(); }
В вышеприведенном коде мы получаем имя пользователя, и находим этого пользователя в базе, если он найден, то WebSecurity.GeneratePasswordResetToken генерирует маркер для сброса пароля. И далее генерируется url с этим маркером. Функция SendEmail пока ничего не делает и для теста мы выводим url в сообщении на самой странице. Метод действия ResetPassword будет реализован тоже позднее. Запускаем проект открываем страницу восстановления пароля и вводим имя пользователя. Нажимаем кнопку Recover. Проявится тестовое сообщение выделенное красным цветом с кодом ссылки и адресом для изменения пароля.
Copyright © CodeHint.ru 2013-2024 (v2.4.7 - работает на Angular Universal)Калькулятор инвест-портфеля