【问题标题】:ASP.NET WebForms with Identity带有标识的 ASP.NET WebForms
【发布时间】:2018-12-27 19:07:14
【问题描述】:

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

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

(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(Request) 返回 null。在 IdentityModels.cs 类中,我看到以下内容:

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

我希望这可以开箱即用?由于没有生成查询参数,我是否应该假设我们应该自己编写代码?这里甚至需要 CodeKey 查询参数,还是有其他方法可以获取 ResetPassword 方法所期望的令牌?

【问题讨论】:

    标签: asp.net webforms asp.net-identity


    【解决方案1】:
    1. 是的,兼容。

    2. “代码”在 Forgot.aspx.cs 中生成:

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

      并通过电子邮件发送而无需每个人都可以重置的代码。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多