具有身份的ASP.NET WebForms

时间:2018-12-27 19:07:15

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

我创建了一个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方法期望的令牌?

1 个答案:

答案 0 :(得分:1)

  1. 是兼容的。

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

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

    ,并通过电子邮件发送而无需验证码。