【发布时间】:2014-07-06 08:17:44
【问题描述】:
我正在使用 ASP.NET MVC5 Identity,并希望用户能够只需输入他们的电子邮件即可重置密码。
只有固定数量的用户,并且他们已经设置好,包括一个电子邮件地址。如果用户访问该站点,他们可以单击“发送我的密码”链接,该链接应将有效密码发送到已存入的电子邮件中。
我想管理员接收当前密码没有简单的方法,所以我认为有必要重置密码然后创建邮件:
[HttpPost]
[AllowAnonymous]
public JsonResult RecoverPassword(string usersEmail)
{
try
{
//"db" is my Context..
var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
var user = db.Users.Where(x => x.Email == usersEmail).First();
Random rnd = new Random();
int rndNumber = rnd.Next(100, 999);
string Password = "MostSecurePasswordInTheWorld" + rndNumber + ".";
um.RemovePassword(user.Id);
um.AddPassword(user.Id, Password);
db.SaveChanges();
//send mail
...
这可能有一些弱点(知道某个用户的有效电子邮件的每个人都可能会重置它,密码在邮件中发送,自动生成的密码很弱等)。但最大的弱点是.. 密码无法重置。
不过,我在调试中没有遇到任何错误,而且我有点无能为力。这里可能有什么问题?是我得到的“用户”
var user = db.Users.Where(x => x.Email == usersEmail).First();
不是这里需要的用户对象?
【问题讨论】:
-
我强烈建议不要在没有任何验证的情况下更改密码(即,先链接到用户,一旦他们回复,允许他们更改密码..这不需要通过电子邮件发送密码,并且不会'不允许用户通过未经身份验证更改密码来互相恶作剧)
标签: asp.net asp.net-mvc asp.net-identity