Asp.net mvc MVC4密码恢复
首先,我是MVC新手,我正在尝试为MVC4实现密码恢复功能。我使用以下技术实现此功能: 我理解它的工作方式,但是缺少了一个我现在尝试实现的helper类。我说的是类:NotificationsHelper.SendPasswordRetrieval(model.Email,this.ControllerContext)强> 控制器上的RetrievePassword帐户控制器具有参数PasswordRetrievalModel。我猜这是一个连接到db的类模型,实现了主题中的一些属性,是一个名为Email的字符串属性。这是正确的吗 然后,通知shelper.SendPasswordRetrieval(model.Email,this.ControllerContext)静态类使用两个参数实现此静态方法SendPasswordRetrievla:model.Email这是PasswordRetrievalModel类的字符串属性,因此这将是我们将向其发送电子邮件的用户电子邮件。然后,第二个参数是this.ControllerContext。此参数的意义是什么发送到SendPasswordRetrieval方法的值将包含哪些内容 然后我实现了这样的类:Asp.net mvc MVC4密码恢复,asp.net-mvc,controller,asp.net-mvc-4,asp.net-membership,asp.net-mail,Asp.net Mvc,Controller,Asp.net Mvc 4,Asp.net Membership,Asp.net Mail,首先,我是MVC新手,我正在尝试为MVC4实现密码恢复功能。我使用以下技术实现此功能: 我理解它的工作方式,但是缺少了一个我现在尝试实现的helper类。我说的是类:NotificationsHelper.SendPasswordRetrieval(model.Email,this.ControllerContext) 控制器上的RetrievePassword帐户控制器具有参数PasswordRetrievalModel。我猜这是一个连接到db的类模型,实现了主题中的一些属性,是一个名为Ema
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;
}
}
}
公共静态类通知Shelper
{
公共静态bool SendPasswordRetrieval(字符串emailAddress,ControllerContext ctx)
{
尝试
{
StringBuilder emailMessage=新建StringBuilder();
emailMessage.Append(“
”);
emailMessage.Append(“你好,”);
emailMessage.Append(“您已请求密码恢复。”);
emailMessage.Append(“
”);
emailMessage.Append(“请单击下面的链接更改密码:
”);
emailMessage.Append(“
”);
emailMessage.Append(string.Format(“http://www.example.com/Account/Validate?email={0}&令牌={1},电子邮件地址,**345982374532453435345**);
emailMessage.Append(“
”);
MailMessage email=新的MailMessage();
email.From=新邮件地址(“noreplay@example.com");
email.To.Add(新邮件地址(emailAddress));
email.Subject=“domain.com密码恢复”;
email.Body=emailMessage.ToString();
email.IsBodyHtml=true;
SmtpClient smtpServer=新的SmtpClient();
smtpServer.Host=“smtp.gmail.com”;
smtpServer.Port=587;
smtpServer.Credentials=新的网络凭据(“用户名”、“密码”);
smtpServer.EnableSsl=true;
发送(电子邮件);
返回true;
}
捕获(例外e)
{
Trace.WriteLine(String.Format(“未能将电子邮件发送到{0}.”,emailAddress));
返回false;
}
}
}
在上面的代码中,我列出了url的格式行,如何使用@agacian提供的代码将令牌带到那里?令牌是否来自第二个参数ControllerContext?如果是,如何从那里获取它?为
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;
}
}
publicstaticboolsendpasswordretrieval(字符串emailAddress,ControllerContext ctx)
{
尝试
{
StringBuilder emailMessage=新建StringBuilder();
字符串标记=Guid.NewGuid();
//调用将使用令牌更新表的方法
使用ResetTocket(tocken)更新SerTable;
emailMessage.Append(“
”);
emailMessage.Append(“你好,”);
emailMessage.Append(“您已请求密码恢复。”);
emailMessage.Append(“
”);
emailMessage.Append(“请单击下面的链接更改密码:
”);
emailMessage.Append(“
”);
emailMessage.Append(string.Format(“http://www.example.com/Account/Validate?email={0}&token={1}(emailAddress,token));
emailMessage.Append(“
”);
MailMessage email=新的MailMessage();
email.From=新邮件地址(“noreplay@example.com");
email.To.Add(新邮件地址(emailAddress));
email.Subject=“domain.com密码恢复”;
email.Body=emailMessage.ToString();
email.IsBodyHtml=true;
SmtpClient smtpServer=新的SmtpClient();
smtpServer.Host=“smtp.gmail.com”;
smtpServer.Port=587;
smtpServer.Credentials=新的网络凭据(“用户名”、“密码”);
smtpServer.EnableSsl=true;
发送(电子邮件);
返回true;
}
捕获(例外e)
{
Trace.WriteLine(String.Format(“未能将电子邮件发送到{0}.”,emailAddress));
返回false;
}
}
用户重置密码后,清空重置令牌字段