ASP.NET MVC 5默认WebApp忘记密码模块丢失?

时间:2013-11-05 19:19:01

标签: asp.net asp.net-mvc-4 simplemembership asp.net-mvc-5 asp.net-identity

在带有SimpleMembership的MVC 4中,所有这些函数都带有您在Visual Studio中创建的默认webbapp。

我想知道在哪里可以使用新的ASP.NET身份会员系统为MVC 5找到相同的内容?在谷歌搜索结果中是否有一些官方博客或某些内容隐藏起来?

UPDATE1 http://blogs.msdn.com/b/webdev/archive/2013/12/20/announcing-preview-of-microsoft-aspnet-identity-2-0-0-alpha1.aspx

UPDATE2 :ASP.NET Identity 2.0 RTM已发布。忘记密码包含在样本/模板中。 http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-0-0.aspx

4 个答案:

答案 0 :(得分:2)

我们正在努力将这些功能添加到ASP.NET Identity系统和MVC 5模板中。

答案 1 :(得分:2)

我也碰到了这个。为了解决这个问题,我在AccountController.cs(以及相应的视图)中创建了一些控制器操作来处理它。

以下是重置用户密码的实际行:

[AllowAnonymous]
[HttpPost]
public ActionResult ResetForgottenPassword(string key, ManageUserViewModel model)
{
    var user = db.Users.SingleOrDefault(u => u.ForgotPasswordCode != null && u.ForgotPasswordCode == key);

    if (user == null || !user.ForgotPasswordDate.HasValue || user.ForgotPasswordDate.Value.AddDays(1) < DateTime.UtcNow)
            return new HttpUnauthorizedResult();

    ModelState state = ModelState["OldPassword"];
    if (state != null)
    {
        state.Errors.Clear();
    }

    if (ModelState.IsValid)
    {
        if (UserManager.HasPassword(user.Id))
            UserManager.RemovePassword(user.Id);

        IdentityResult result = UserManager.AddPassword(user.Id, model.NewPassword);

        if (result.Succeeded)
        {
            //Clear forgot password temp key
            user.ForgotPasswordCode = null;
            user.ForgotPasswordDate = null;
            db.SaveChanges();

            //Sign them in
            var identity = UserManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
            AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);

            return RedirectToAction("Manage", new { Message = ManageMessageId.SetPasswordSuccess });
        }
        else
        {
            AddErrors(result);
        }
    }

    ViewBag.ForgotPasswordCode = key;

    return View(model);
}

某些自定义项是用户对象上的新字段:

  • ForgotPasswordCodeForgotPasswordDate在整个“重置密码电子邮件”过程中跟踪用户。
  • 一旦用户从电子邮件链接到达,我就会在ViewBag中传递密钥。
  • db变量是从基本控制器继承的数据库上下文类的属性。
  • 我在我的数据库中使用UTC DateTimes。如果不这样做,请将DateTime.UtcNow更改为DateTime.Now

可能不是最好的解决方案,但它是一个相当快速和简单的补丁。

答案 2 :(得分:1)

你可以自己建立一个重置密码(不确定这是更好的选择,但总比没有好)

使用:

生成哈希
var newPwdHash = new PasswordHasher().HashPassword(newPasswordPlain)

并替换为用户的密码属性

答案 3 :(得分:0)

如果您不能等待ASP.NET Identity Team添加此功能,您可以从open source project SimpleSecurity获得密码重置的实现。只需看看ResetPassword action on the AccountController即可。你可以read about how the password reset was implemented here。虽然本文引用了SimpleMembership,但SimpleSecurity使用相同的API来支持MVC应用程序中的SimpleMembership或ASP.NET Identity。