【问题标题】:ASP.NET MVC 5 Default WebApp Forgot Password module missing?缺少 ASP.NET MVC 5 默认 WebApp 忘记密码模块?
【发布时间】:2013-11-16 19:15:17
【问题描述】:

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

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

UPDATE1http://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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 一个很好的列表,正如大多数用户所期望的那样,brockallen.com/2013/10/20/… 我知道即将在 1.1 中发布的 OwinMiddleware,未来版本预计将为链接中列出的功能提供块。
    • 很酷,然后我会牵着我的马,同时继续在我的应用程序中处理一些其他的东西。 :)
    • 你好普拉纳夫。您知道发布这些功能的大致时间范围吗?如果没有此功能,整个 ASP.NET MVC 5 Internet 模板就毫无意义。如果在 UserManager 库中添加一个新的“ChangePassword”方法,该方法不需要知道当前密码,那也很棒,这样管理用户就可以为锁定的用户重置密码。谢谢!
    【解决方案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

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

    【讨论】:

      【解决方案3】:

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

      使用以下方法生成哈希:

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

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

      【讨论】:

        【解决方案4】:

        如果您迫不及待地等待 ASP.NET 身份团队添加此功能,您可以从 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。

        【讨论】:

          猜你喜欢
          • 2012-02-09
          • 2013-04-12
          • 1970-01-01
          • 2021-02-18
          • 2013-05-13
          • 1970-01-01
          • 2012-02-26
          • 1970-01-01
          • 2011-12-02
          相关资源
          最近更新 更多