Sie überschreiben die falsche Methode, Steve. Sie möchten den kündbaren Code ChangingPassword
überschreiben.
Try this:
protected void ChangePassword1_ChangingPassword(object sender, LoginCancelEventArgs e)
{
// do your lookup here,
bool passwordHasBeenPreviouslyUsed = true;
if (passwordHasBeenPreviouslyUsed)
{
e.Cancel = true;
// notify of error
return;
}
}
Und wie pro vorherigen Q/A-Sitzungen, sollten Sie nie üBERHAUPT HAUPT speichern das Kennwort eines Benutzers . Gehen Sie zur Mitgliedschaftstabelle und holen Sie sich das Salz und verwenden Sie dieses, um das eingehende Passwort zu hashen, um es mit den bereits in der Suchtabelle gespeicherten Werten zu vergleichen.
Viel Glück.
(1) - Wie haltbar wäre Ihre Position, wenn der CEO herausfindet, dass sein Passwort in einem auswertbaren Format gespeichert wurde? Den schwarzen Magiern, die wir sind, wird Vertrauen entgegengebracht, und dieses Vertrauen birgt seine eigenen Risiken. Sei dir ihrer bewusst. ;-)
EDIT:
Ein Arbeitsbeispiel:
ChangePassword.aspx
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Diagnostics"%>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ChangePassword1_ChangingPassword(object sender, LoginCancelEventArgs e)
{
// works for me!
Debugger.Break();
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ChangePassword ID="ChangePassword1" runat="server" OnChangingPassword="ChangePassword1_ChangingPassword">
</asp:ChangePassword>
</div>
</form>
</body>
</html>
aktualisieren: Sie können auch in einfach definieren einen Handler in einem interessiert sein höherer Bereich, der alle Passwortaktivitäten überwacht:
Betrachten Sie diese
public void SetupPasswordActionHook()
{
//Occurs when a user is created, a password is changed, or a password is reset.
Membership.ValidatingPassword += Membership_ValidatingPassword;
}
void Membership_ValidatingPassword(object sender, ValidatePasswordEventArgs e)
{
// Gets a value that indicates whether the System.Web.Security.MembershipProvider.ValidatingPassword event is being raised during a
// call to the System.Web.Security.MembershipProvider.CreateUser() method.
// true if the System.Web.Security.MembershipProvider.ValidatingPassword event is being raised during a call to the
// System.Web.Security.MembershipProvider.CreateUser() method; otherwise, false.
bool isNewUser = e.IsNewUser;
// Gets the password for the current create-user, change-password, or reset-password action.
// The password for the current create-user, change-password, or reset-password action.
string password = e.Password;
// Gets the name of the membership user for the current create-user, change-password, or reset-password action.
// The name of the membership user for the current create-user, change-password, or reset-password action.
string username = e.UserName;
// Gets or sets a value that indicates whether the current create-user, change-password, or reset-password action will be canceled.
// true if the current create-user, change-password, or reset-password action will be canceled; otherwise, false. The default is false.
e.Cancel = true;
// Gets or sets an exception that describes the reason for the password-validation failure.
// An System.Exception that describes the reason for the password-validation failure.
e.FailureInformation = new Exception("This is why I failed your password");
}
Ich bin mir nicht sicher, was Sie hier tun möchten. Sie sprechen davon, dass Sie alte Kennwörter verifizieren möchten, aber Ihre SQL-Anweisung ruft Benutzernamen ab und überprüft nie die Kennwörter. Wie verifizierst du das Passwort selbst? – cortijon
Ja, Sie haben Recht, dieser Code befindet sich auf einer anderen Seite, ich habe gerade eine Testseite erstellt, Entschuldigung wegen der Verwirrung. Ich hatte gerade Schwierigkeiten, den Prozess selbst zu unterbrechen. Vielen Dank für Ihre Eingabe. – Steve
Irgendwelche Fortschritte auf diesem? –