3

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

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

更新1: 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

4 回答 4

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 日期时间。如果不这样做,请更改DateTime.UtcNow为。DateTime.Now

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

于 2013-12-26T22:22:34.043 回答
2

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

于 2013-11-05T21:14:26.183 回答
1

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

使用以下命令生成哈希:

var newPwdHash = new PasswordHasher().HashPassword(newPasswordPlain)

并替换为用户的密码哈希属性

于 2013-12-23T13:03:51.563 回答
0

如果您不能等待 ASP.NET 身份团队添加此功能,您可以从开源项目 SimpleSecurity获得密码重置的实现。只需看一下AccountController 上的 ResetPassword 操作。您可以在此处阅读有关如何实施密码重置的信息。尽管本文引用了 SimpleMembership,但 SimpleSecurity 使用相同的 API 来支持 MVC 应用程序中的 SimpleMembership 或 ASP.NET Identity。

于 2013-12-30T14:40:58.210 回答