C# ASP.NET密码恢复控件-始终;“成功”;即使提供了错误的答案?
我使用的PasswordRecovery控件总是重置密码,即使用户提供的答案不正确。它似乎没有启动“OnAnswerLookupError”事件。有没有人遇到过这种情况,或者知道我做错了什么 非常简单的代码,我将粘贴到下面。它唯一真正的定制是让被锁定的用户重置密码(根据客户的请求):C# ASP.NET密码恢复控件-始终;“成功”;即使提供了错误的答案?,c#,asp.net,C#,Asp.net,我使用的PasswordRecovery控件总是重置密码,即使用户提供的答案不正确。它似乎没有启动“OnAnswerLookupError”事件。有没有人遇到过这种情况,或者知道我做错了什么 非常简单的代码,我将粘贴到下面。它唯一真正的定制是让被锁定的用户重置密码(根据客户的请求): 密码恢复 按照说明重置密码。 用户名 你好 , 您必须回答恢复问题才能向您发送新电子邮件。 问题: 答复: 登录 公共部分类密码恢复:System.Web.UI.Page { 受保护的无效页面加载
密码恢复
按照说明重置密码。
用户名
你好
,
您必须回答恢复问题才能向您发送新电子邮件。
问题:
答复:
登录
公共部分类密码恢复:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
lblMessage.Text=string.Empty;
}
受保护的void UserCheck(对象发送方,事件参数e)
{
MembershipUser mu=Membership.GetUser(RecoveryInput.UserName);
if(mu==null)
{
UserLookupError(发送方,e);
返回;
}
if(μIsLockedOut)
{
//UserLookupError(发送方,e);
//返回;
mu.UnlockUser();
}
}
受保护的无效UserLookupError(对象发送方,事件参数e)
{
lblMessage.Text=“重置密码时出现问题。请与管理员或帐户主管联系以获得帮助。”;
}
受保护的void RecoveryInput\u SendingMail(对象发送者,MailMessageEventArgs e)
{
尝试
{
MembershipUser mu=Membership.GetUser(RecoveryInput.UserName);
mu.Comment=“MustChangePassword”;
成员。更新者(mu);
}
捕获(例外情况除外)
{
实用程序.错误处理.处理错误(ex);
lblMessage.Text=“重置密码时出现问题。请与管理员联系。”;
}
}
}
问题几乎肯定是因为您使用的是母版页。将此页面放入其自己的页面,不带母版页,然后重试,它应该可以工作。更新:这最终是由于SqlMembershipProvider的内部实现以及未能捕获aspnet_Membership_ResetPassword存储过程的返回码造成的。ASP.NET本身没有问题。由于我们必须访问这个存储过程的方式(想想洋葱层)——我不太清楚。这个问题可以结束了 我也读过一些关于母版页导致这些控件出现问题的文章,实际上在我发布问题之前,我刚刚完成了尝试。不幸的是,即使是一个完全空白的页面(在表单标记中有此标记),它也有相同的行为:(@Cortright--试着看看它是否能帮到你。这个页面上的OP听起来像是他和你有相同的问题。很高兴你找到了解决方案!
<%@ Page Title="Password Recovery" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="PasswordRecovery.aspx.cs" Inherits="OurApp.UI.Account.PasswordRecovery" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
Password Recovery
</h2>
<p>
Follow instructions to reset your password.
</p>
<asp:Label ID="lblMessage" runat="server" Font-Bold="true" ForeColor="red" />
<asp:PasswordRecovery SuccessText="Your password was successfully reset and emailed to you."
OnAnswerLookupError="UserLookupError"
OnUserLookupError="UserLookupError"
OnVerifyingUser="UserCheck"
QuestionFailureText="Incorrect answer. Please try again." runat="server" ID="RecoveryInput"
UserNameFailureText="Username not found."
OnSendingMail="RecoveryInput_SendingMail">
<MailDefinition IsBodyHtml="false" BodyFileName="~/Account/email.ascx"
From="DoNotReply@ourdomain.com"
Subject="Our App - Password Reset"
Priority="High">
</MailDefinition>
<UserNameTemplate>
<asp:Panel ID="pnl1" runat="server" DefaultButton="submit">
<dl>
<dd>User Name</dd>
<dd>
<asp:TextBox ID="Username" runat="server" AUTOCOMPLETE="OFF" />
</dd>
<dt></dt>
<dd>
<asp:Button ID="submit"
CausesValidation="true"
ValidationGroup="PWRecovery"
runat="server"
CommandName="Submit"
Text="Submit" />
</dd>
<dt></dt>
<dd>
<p class="Error"><asp:Literal ID="ErrorLiteral"
runat="server"></asp:Literal>
</p>
</dd>
</dl>
</asp:Panel>
</UserNameTemplate>
<QuestionTemplate>
<asp:panel ID="pnl1" runat="server" DefaultButton="submit">
Hello
<asp:Literal runat="server" ID="personname" />,
<p>
You must answer your recovery question in order to have a new email sent to you.
</p>
<dl>
<dt>Question:</dt>
<dd>
<asp:Literal runat="server" ID="Question" />
</dd>
<dt></dt>
<dt>Answer:</dt>
<dd>
<asp:TextBox runat="server" ID="Answer" AUTOCOMPLETE="OFF" />
</dd>
<dt></dt>
<dd>
<asp:Button runat="server" ID="submit"
Text="Submit" CommandName="submit" />
</dd>
<dt></dt>
<dd>
<p class="Error">
<asp:Literal ID="FailureText" runat="server"></asp:Literal>
</p>
</dd>
</dl>
</asp:panel>
</QuestionTemplate>
</asp:PasswordRecovery>
<asp:HyperLink NavigateUrl="~/Account/Login.aspx" runat="server">Login</asp:HyperLink>
</asp:Content>
public partial class PasswordRecovery : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lblMessage.Text = string.Empty;
}
protected void UserCheck(object sender, EventArgs e)
{
MembershipUser mu = Membership.GetUser(RecoveryInput.UserName);
if (mu == null)
{
UserLookupError(sender, e);
return;
}
if (mu.IsLockedOut)
{
//UserLookupError(sender, e);
//return;
mu.UnlockUser();
}
}
protected void UserLookupError(object sender, EventArgs e)
{
lblMessage.Text = "There was a problem resetting your password. Please contact your Administrator or Account Executive for assistance.";
}
protected void RecoveryInput_SendingMail(object sender, MailMessageEventArgs e)
{
try
{
MembershipUser mu = Membership.GetUser(RecoveryInput.UserName);
mu.Comment = "MustChangePassword";
Membership.UpdateUser(mu);
}
catch (Exception ex)
{
Utilities.ErrorHandling.HandleError(ex);
lblMessage.Text = "There was a problem resetting your password. Please contact your administrator.";
}
}
}