MVC 4 Восстановление пароля

Во-первых, я новичок в MVC и пытаюсь реализовать функциональность восстановления пароля для MVC 4. Я реализую это, используя эту технику, опубликованную здесь: Где найти пример кода C# для восстановления пароля в ASP .NET MVC2

Я понял, как это работает, однако отсутствует вспомогательный класс, который я пытаюсь реализовать прямо сейчас. Я говорю о классе: NotificationsHelper.SendPasswordRetrieval(model.Email, this.ControllerContext);

Контроллер действия RetrievePassword на контроллере имеет параметр PasswordRetrievalModel model. Я предполагаю, что это модель класса, которая подключается к базе данных и реализует некоторые свойства темы. Это свойство строки называется Email. Это правильно?

Затем NotificationsHelper.SendPasswordRetrieval(model.Email, this.ControllerContext); Статический класс реализует этот статический метод SendPasswordRetrievla с двумя параметрами: model.Email, который является строковым свойством класса модели PasswordRetrievalModel, поэтому это будет электронная почта пользователя, на которую мы отправим электронную почту. Второй параметр - это this.ControllerContext. Какой смысл этого параметра, какие значения будут содержать те, которые отправляются в метод SendPasswordRetrieval?

Чем я реализовал класс следующим образом:

public static class NotificationsHelper
{
    public static bool SendPasswordRetrieval(string emailAddress, ControllerContext ctx)
    {
        try
        {
            StringBuilder emailMessage = new StringBuilder();

            emailMessage.Append("<br />");
            emailMessage.Append("Hello,");
            emailMessage.Append("You have requested a password recovery.");
            emailMessage.Append("<br />");
            emailMessage.Append("Please click the link below to change your password: <br />");
            emailMessage.Append("<br />");
            emailMessage.Append(string.Format("http://www.example.com/Account/Validate?email={0}&token={1}", emailAddress, "**345982374532453435345**"));
            emailMessage.Append("<br />");

            MailMessage email = new MailMessage();
            email.From = new MailAddress("noreplay@example.com");
            email.To.Add(new MailAddress(emailAddress));
            email.Subject = "domain.com Password Recovery";
            email.Body = emailMessage.ToString();
            email.IsBodyHtml = true;

            SmtpClient smtpServer = new SmtpClient();
            smtpServer.Host = "smtp.gmail.com";
            smtpServer.Port = 587;
            smtpServer.Credentials = new NetworkCredential("username", "password");
            smtpServer.EnableSsl = true;
            smtpServer.Send(email);
            return true;
        }            
        catch (Exception e)
        {
            Trace.WriteLine(String.Format("Failure to send email to {0}.", emailAddress));
            return false;
        }
    }
}

В приведенном выше коде я перечислил строку, в которой отформатирован URL, как мне перенести туда токен, используя предоставленный код @agarcian? Идет ли токен из второго параметра ControllerContext? Если да, как я могу получить это оттуда?

1 ответ

Добавить новый столбец для usertable назови это pwdresetTocket, когда пользователь запрос на сброс пароля вставьте Guid.NewGuid() в поле pwdresetTocket для этого пользователя добавьте то же самое в URL обратного вызова

если вы не хотите добавлять столбец в существующую таблицу, вы можете создать новую таблицу и сопоставить ее с пользовательской таблицей.

Тогда ваш метод выглядит следующим образом.

public static bool SendPasswordRetrieval(string emailAddress, ControllerContext ctx)
    {
        try
        {
            StringBuilder emailMessage = new StringBuilder();
          string token = Guid.NewGuid();
        // call to a method that will update the table with token
        updateUsertablewithResetTocket(tocken);

            emailMessage.Append("<br />");
            emailMessage.Append("Hello,");
            emailMessage.Append("You have requested a password recovery.");
            emailMessage.Append("<br />");
            emailMessage.Append("Please click the link below to change your password: <br />");
            emailMessage.Append("<br />");
            emailMessage.Append(string.Format("http://www.example.com/Account/Validate?email={0}&token={1}", emailAddress, token));
            emailMessage.Append("<br />");

            MailMessage email = new MailMessage();
            email.From = new MailAddress("noreplay@example.com");
            email.To.Add(new MailAddress(emailAddress));
            email.Subject = "domain.com Password Recovery";
            email.Body = emailMessage.ToString();
            email.IsBodyHtml = true;

            SmtpClient smtpServer = new SmtpClient();
            smtpServer.Host = "smtp.gmail.com";
            smtpServer.Port = 587;
            smtpServer.Credentials = new NetworkCredential("username", "password");
            smtpServer.EnableSsl = true;
            smtpServer.Send(email);
            return true;
        }            
        catch (Exception e)
        {
            Trace.WriteLine(String.Format("Failure to send email to {0}.", emailAddress));
            return false;
        }
    }

как только пользователь сбросит пароль, очистите поле токена сброса

Другие вопросы по тегам