SimpleMembership: Восстановление пароля учетной записи в проектах ASP.NET MVC 4

| Четверг, 16 мая, 2013

Метки: ASP.NET MVC, SimpleMembership Комментарии: 0

Отправка e-mail сообщения c url для изменения пароля

Теперь реализуем, собственно, возможность отсылки письма на 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-2019