首先,我对MVC非常陌生,我正在尝试为MVC 4实现密码恢复功能。
我理解它的工作方式,但是缺少一个我现在试图实现的助手类。我指的是这门课:NotificationsHelper.SendPasswordRetrieval(model.Email,this.ControllerContext);
控制器上的RetrievePassword访问控制器具有参数PasswordRetrievalModel model。我猜这是一个连接到db并在主题中实现一些属性的类模型,它是一个名为Email的字符串属性。这是正确的吗?
NotificationsHelper.SendPasswordRetrieval(model.Email,);静态类使用两个参数实现这个静态方法SendPasswordRetrievla:model.Email,即string属性frrom模型类,因此这将是我们将发送电子邮件的用户电子邮件。第二个参数是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?的令牌。如果是的话,从那里怎么弄?
发布于 2013-01-08 21:37:37
为usertable名称为pwdresetTocket添加新列,当用户请求重置密码时,在该用户的pwdresetTocket字段中插入Guid.NewGuid()时,在回调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;
}
}用户重置密码后,清空重置令牌字段。
https://stackoverflow.com/questions/13746856
复制相似问题