用户邮件找回密码实现

改天我在写详细注释吧,代码先贴出来,注释很明白了,应该无需多言。

  1 Controller代码:
  2 public ActionResult ForgotPassword()
  3         {
  4             return View();
  5         }
  6         [ActionName("ForgotPassword"),HttpPost]
  7         public ActionResult ForgotPasswordPost(ForgotPasswordModel model)
  8         {
  9             if (ModelState.IsValid)
 10             {
 11                 var user = _userDal.GetUserByName(model.Name);
 12                 if (user == null)
 13                 {
 14                     ModelState.AddModelError("","用户名不存在!");
 15                     return View();
 16                 }
 17                 if (string.IsNullOrWhiteSpace(user.Email))
 18                 {
 19                     ModelState.AddModelError("", "该账户没有绑定邮箱,无法找回密码!");
 20                     return View();
 21                 }
 22                 string res=_userDal.UserFindPassword(user.ID, user.Name, user.Email, HttpContext.Request.UserHostAddress);
 23                 if (!string.IsNullOrEmpty(res))
 24                 {
 25                     ModelState.AddModelError("", res);
 26                     return View();
 27                 }
 28                 else
 29                 {
 30                     ModelState.AddModelError("","邮件已发送,请注意查收!");
 31                     return View();
 32                 }
 33             }
 34             return View(model);
 35         }
 36
 37 DAL层代码:
 38   #region 密码找回
 39         /// <summary>
 40         /// 用户找回密码功能
 41         /// </summary>
 42         /// <param name="userId">用户ID</param>
 43         /// <param name="userName">用户名</param>
 44         /// <param name="ip">用户申请找回密码时候的IP</param>
 45         /// <param name="email">用户的邮箱</param>
 46         /// <returns></returns>
 47         public string UserFindPassword(int userId, string userName, string email, string ip)
 48         {
 49             DateTime expirationTime = DateTime.Now.AddDays(1);//申请链接过期时间
 50             Random random = new Random();
 51             var secretKey = random.Next(100000, 999999).ToString().ToPassword();//生成随机的Key
 52             Web_UserFindPassword model = new Web_UserFindPassword
 53             {
 54                 UserID = userId,
 55                 UserName = userName.Trim(),
 56                 IP = ip,
 57                 ExpirationTime = expirationTime,
 58                 SecretKey = secretKey
 59             };
 60             dbContext.Web_UserFindPassword.Add(model);//把申请信息存到数据库去
 61             dbContext.SaveChanges();
 62             StringBuilder sb = new StringBuilder(); sb.Append("亲爱的" + userName + "您好:<br/><br/>");
 63             sb.Append("点击以下链接设置新密码。<br/><br/>");
 64             sb.Append("<a href =\"http://www.vimi8.com/Member/FindPassword?SecretKey=" + model.SecretKey + "&UserId=" + model.UserID + "&ExpirationTime=" + model.ExpirationTime + "\">http://www.vimi8.com/Member/FindPassword?SecretKey=" + model.SecretKey + "&UserId=" + model.UserID + "&ExpirationTime=" + "&ExpirationTime=" + model.ExpirationTime + " </a><br/><br/>");
 65             sb.Append("(如果无法点击该URL链接地址,请将它复制并粘帖到浏览器的地址输入框,然后单击回车即可。)<br/><br/>");
 66             sb.Append("注意:本链接有效期24小时,过期链接将会失效。在您点击一次后失效。<br/><br/>");
 67             sb.Append("我们将一如既往、热忱的为您服务!<br/><br/>");
 68             string messageBody = sb.ToString();
 69             string res = MailInfo.SendMail(email, "为米网找回密码", messageBody);
 70             return res;
 71         }
 72
 73         public Web_UserFindPassword GetFindPasswordModel(string secretKey, int userId, DateTime expirationTime)
 74         {
 75             return dbContext.Web_UserFindPassword.FirstOrDefault(x => x.ExpirationTime.Minute == expirationTime.Minute && x.SecretKey == secretKey && x.UserID == userId);
 76         }
 77
 78         public void DeleteFindPasswordModel(int id)
 79         {
 80             var find = dbContext.Web_UserFindPassword.FirstOrDefault(x => x.ID == id);
 81             if (find != null)
 82             {
 83                 dbContext.Web_UserFindPassword.Remove(find);
 84                 dbContext.SaveChanges();
 85             }
 86         }
 87         #endregion
 88
 89 数据库设计:
 90 using System;
 91
 92
 93     public class Web_UserFindPassword
 94     {
 95         public int ID { get; set; }
 96         public int? UserID { get; set; }
 97         public string UserName { get; set; }
 98         public DateTime ExpirationTime { get; set; }
 99         public string SecretKey { get; set; }
100         public string IP { get; set; }
101     }
时间: 2024-10-13 09:46:01

用户邮件找回密码实现的相关文章

通过邮件找回密码

前言 本文将介绍忘记密码时通过发送重置密码邮件找回密码的实现思路.整个实现过程中最重要的就是以下三点: 如何发送邮件到用户指定邮箱 邮件中的重置密码链接构成是怎么样的 验证重置密码链接的合法性(是否过期) 先来个实现的效果展示吧,然后再仔细分析如何去实现各个部分: 效果展示 (这里盗用下我们小组作品成果的前端) 用户输入注册时的邮箱账户获取重置密码的链接 用户登录自己的邮箱查看邮件 用户点击重置密码链接,如果在重置链接有效期内我们跳转到重置密码界面,否则提醒用户该链接已过期 如何发送邮件给用户指

Jsp邮件找回密码全攻略

[来源网络  http://www.2cto.com/kf/201502/376374.html] 一般大型网站我们登录的时候,密码忘了都有个功能可以找回密码. 细数下大致的方法: 1.直接把密码发送到你的邮箱去.一般是临时密码. 2.短信验证,成本较高. 3.密保问题 4.发送一个链接到你邮箱点击即可更改密码. 个人认为第四种方法最经济实惠,这次也主要都是在搞这个. 搞了一个晚上,单单邮件发送功能写了快300行,虽然很多是注释和空格,被舍友一说,用python只写了20几行,不禁膜拜PYTHO

SpringMVC通过邮件找回密码功能的实现

1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人的思路:发送邮件→请求邮件里的URL→验证url→{验证成功修改密码,不成功跳转到失败页面} 重点就是如何生成这个url和如何解析这个url. 需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url 3.加密能防止伪造攻击,一次url只能验证一次,

Linux系统救援模式应用:单用户模式找回密码

利用Linux系统救援模式找回密码 方法一: 开机时手要快按任意键,因为默认时间5s grub菜单,只有一个内核,没什么好上下选的,按e键.升级了系统或安装了Xen虚拟化后,就会有多个显示. 接下来显示如下,选择第二项,按e键 接下来显示如下,在rhgb quiet最后加"空格",然后键入"1"或"s"或"S"或"single"都可以,按回车键返回上一层 按b键启动系统 最后界面直接输入passwd就能改r

通过邮件重置密码

目前大部分用户注册的密码都是使用MD5实现加密,而MD5加密确实不可逆的,若要解密MD5加密之后的数据,则使用碰撞的方法,不过效率太低,概率小,因此用户忘记密码之后只能通过重置新密码(!=找回密码) 邮件找回密码前提: 用户注册的时候必须进行邮箱验证: 邮件找回密码流程: 注册一个邮箱,用于给用户发邮件(相当于发件人): 先输入用户名验证用户是否存在(用户名是唯一的): 输入邮箱,根据用户名和邮箱验证用户的邮箱是否正确,若不正确则让用户重新输入,否则往下走: 发送链接到用户邮箱,链接中存有key

PHP会员找回密码功能实现实例介绍

设置思路 1.用户注册时需要提供一个E-MAIL邮箱,目的就是用该邮箱找回密码. 2.当用户忘记密码或用户名时,点击登录页面的“找回密码”超链接,打开表单,并输入注册用的E-MAIL邮箱,提交. 3.系统通过该邮箱,从数据库中查找到该用户信息,并更新该用户的密码为一个临时密码(比如:12345678). 4.系统借助Jmail功能把该用户的信息发送到该用户的邮箱中(内容包括:用户名.临时密码.提醒用户及时修改临时密码的提示语). 5.用户用临时密码即可登录. HTML 我们在找回密码的页面上放置

Java实现邮箱找回密码

[来源网络:http://www.cnblogs.com/zyw-205520/p/3738439.html] 通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人的思路:发送邮件→请求邮件里的URL→验证url→{验证成功修改密码,不成功跳转到失败页面} 重点就是如何生成这个url和如何解析这个url.

php+jQuery+Mysql找回密码----ThinkPHP

最近用ThinkPHP做了一个邮箱找回密码功能,在遭遇了N个bug之后终于做成了,下面分享一下邮箱找回密码功能的实现: 邮箱找回密码实际上就是在用户通过验证之后重置密码的过程,一般开发者会在验证用户信息后通过程序生成一个新密码 或者生成一个特定的链接并发送邮件到用户邮箱,用户从邮箱链接到网站的重置密码模块重新设置新密码. 一般步骤是: 1.表单输入注册时的邮箱: 2.验证用户邮箱是否正确,如果用户邮箱不存在网站的用户表中,则提示用户邮箱未注册: 3.发送邮件,如果用户邮箱确实存在用户表中,则组合

Java实现邮箱找回密码 --转载

通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人的思路:发送邮件→请求邮件里的URL→验证url→{验证成功修改密码,不成功跳转到失败页面} 重点就是如何生成这个url和如何解析这个url. 需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url 邮箱 3.加密能防止