代码之家  ›  专栏  ›  技术社区  ›  IrishChieftain

具有标识的ASP.NET WebForms

  •  0
  • IrishChieftain  · 技术社区  · 6 年前

    我创建了一个Web Forms 4.5.2测试应用程序。这是一个由两部分组成的问题。

    (1) 我看到安装了Microsoft.AspNet.Identity.Core。此版本与Web窗体兼容还是仅与ASP.NET核心应用兼容?

    (2) 当试图让重置密码表单工作时,我收到了一条无用的通用错误消息,因此我调试了以下开箱即用代码:

    protected void Reset_Click(object sender, EventArgs e)
    {
        string code = IdentityHelper.GetCodeFromRequest(Request);
        if (code != null)
        {
            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
    
            var user = manager.FindByName(Email.Text);
            if (user == null)
            {
                ErrorMessage.Text = "No user found";
                return;
            }
            var result = manager.ResetPassword(user.Id, code, Password.Text);
            if (result.Succeeded)
            {
                Response.Redirect("~/Account/ResetPasswordConfirmation");
                return;
            }
                ErrorMessage.Text = result.Errors.FirstOrDefault();
                return;
            }
    
            ErrorMessage.Text = "An error has occurred";
            return;
        }
    }
    

    IdentityHelper.GetCodeFromRequest(请求)返回null。在IdentityModels.cs类中,我看到以下内容:

    public const string CodeKey = "code";
    public static string GetCodeFromRequest(HttpRequest request)
    {
        return request.QueryString[CodeKey];
    }
    

    我本以为这是开箱即用的?既然没有生成查询参数,我是否可以假设我们应该自己编写代码?这里是否需要CodeKey查询参数,或者是否有其他方法来获取ResetPassword方法所需的令牌?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Shimon Lebovits    6 年前
    1. “代码”是在Forget.aspx.cs中生成的:

      string code = manager.GeneratePasswordResetToken(user.Id);
      //(out of the box its commented out)