| Четверг, 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-2025 (v2.4.7 - работает на Angular Universal)Калькулятор инвест-портфеля