SqlMembershipProvider.ResetPassword(String, String) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Återställer en användares lösenord till ett nytt, automatiskt genererat lösenord.
public:
override System::String ^ ResetPassword(System::String ^ username, System::String ^ passwordAnswer);
public override string ResetPassword(string username, string passwordAnswer);
override this.ResetPassword : string * string -> string
Public Overrides Function ResetPassword (username As String, passwordAnswer As String) As String
Parametrar
- username
- String
Användaren som lösenordet ska återställas för.
- passwordAnswer
- String
Lösenordets svar för den angivna användaren.
Returer
Det nya lösenordet för den angivna användaren.
Undantag
passwordAnswer är ogiltigt.
-eller-
Användarkontot är för närvarande låst.
EnablePasswordReset är inställt på false.
username finns inte i medlemskapsdatabasen.
-eller-
Åtgärden ändra lösenord avbröts av en prenumerant på ValidatingPassword händelsen och egenskapen FailureInformation var null.
-eller-
Ett fel uppstod när lösenordet skulle hämtas från databasen.
username är en tom sträng (""), innehåller ett kommatecken eller är längre än 256 tecken.
-eller-
passwordAnswer är en tom sträng eller är längre än 128 tecken och RequiresQuestionAndAnswer är true.
-eller-
passwordAnswer är längre än 128 tecken efter kodning.
Ett ohanterat undantag inträffade.
Exempel
I följande kodexempel återställs en användares lösenord och det nya, automatiskt genererade lösenordet returneras.
Note
I det Membership här exemplet används klassen för att anropa den SqlMembershipProvider angivna som defaultProvider i filen Web.config. Om du behöver komma åt standardprovidern som typ SqlMembershipProviderkan du omvandla Provider egenskapen för Membership klassen. För att få åtkomst till andra konfigurerade leverantörer som en specifik providertyp kan du komma åt dem med deras konfigurerade namn med Providers egenskapen Membership för klassen och omvandla dem som den specifika providertypen.
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Security" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public void Page_Load(object sender, EventArgs args)
{
if (!Membership.EnablePasswordReset)
{
FormsAuthentication.RedirectToLoginPage();
}
Msg.Text = "";
if (!IsPostBack)
{
Msg.Text = "Please enter a user name.";
}
else
{
VerifyUsername();
}
}
public void VerifyUsername()
{
MembershipUser user = Membership.GetUser(UsernameTextBox.Text, false);
if (user == null)
{
Msg.Text = "The user name " + Server.HtmlEncode(UsernameTextBox.Text) + " was not found. Please check the value and reenter your user name.";
QuestionLabel.Text = "";
QuestionLabel.Enabled = false;
AnswerTextBox.Enabled = false;
ResetPasswordButton.Enabled = false;
}
else
{
QuestionLabel.Text = user.PasswordQuestion;
QuestionLabel.Enabled = true;
AnswerTextBox.Enabled = true;
ResetPasswordButton.Enabled = true;
}
}
public void ResetPassword_OnClick(object sender, EventArgs args)
{
string newPassword = "";
try
{
newPassword = Membership.Provider.ResetPassword(UsernameTextBox.Text, AnswerTextBox.Text);
}
catch (NotSupportedException e)
{
Msg.Text = "An error has occurred resetting your password: " + e.Message + "." +
"Please check your values and try again.";
}
catch (MembershipPasswordException e)
{
Msg.Text = "Invalid password answer. Please reenter the answer and try again.";
return;
}
catch (System.Configuration.Provider.ProviderException e)
{
Msg.Text = "The specified user name does not exist. Please check your value and try again.";
}
if (newPassword != "")
{
Msg.Text = "Password reset. Your new password is: " + Server.HtmlEncode(newPassword);
}
else
{
Msg.Text = "Password reset failed. Please reenter your values and try again.";
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Reset Password</title>
</head>
<body>
<form id="form1" runat="server">
<h3>Reset Password</h3>
<asp:Label id="Msg" runat="server" ForeColor="maroon" /><br />
Username: <asp:Textbox id="UsernameTextBox" Columns="30" runat="server" AutoPostBack="true" />
<asp:RequiredFieldValidator id="UsernameRequiredValidator" runat="server"
ControlToValidate="UsernameTextBox" ForeColor="red"
Display="Static" ErrorMessage="Required" /><br />
Password Question: <b><asp:Label id="QuestionLabel" runat="server" /></b><br />
Answer: <asp:TextBox id="AnswerTextBox" Columns="60" runat="server" Enabled="false" />
<asp:RequiredFieldValidator id="AnswerRequiredValidator" runat="server"
ControlToValidate="AnswerTextBox" ForeColor="red"
Display="Static" ErrorMessage="Required" Enabled="false" /><br />
<asp:Button id="ResetPasswordButton" Text="Reset Password"
OnClick="ResetPassword_OnClick" runat="server" Enabled="false" />
</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Web.Security" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Public Sub Page_Load(sender As Object, args As EventArgs)
If Not Membership.EnablePasswordReset Then
FormsAuthentication.RedirectToLoginPage()
End If
Msg.Text = ""
If Not IsPostBack Then
Msg.Text = "Please enter a user name."
Else
VerifyUsername()
End If
End Sub
Public Sub VerifyUsername()
Dim user As MembershipUser = Membership.GetUser(UsernameTextBox.Text, False)
If user Is Nothing Then
Msg.Text = "The user name " & Server.HtmlEncode(UsernameTextBox.Text) & " was not found. Please check the value and reenter your user name."
QuestionLabel.Text = ""
QuestionLabel.Enabled = False
AnswerTextBox.Enabled = False
ResetPasswordButton.Enabled = False
Else
QuestionLabel.Text = user.PasswordQuestion
QuestionLabel.Enabled = True
AnswerTextBox.Enabled = True
ResetPasswordButton.Enabled = True
End If
End Sub
Public Sub ResetPassword_OnClick(sender As Object, args As EventArgs)
Dim newPassword As String = ""
Try
newPassword = Membership.Provider.ResetPassword(UsernameTextBox.Text, AnswerTextBox.Text)
Catch e As NotSupportedException
Msg.Text = "An error has occurred resetting your password: " & e.Message & "." & _
"Please check your values and try again."
Catch e As MembershipPasswordException
Msg.Text = "Invalid password answer. Please reenter the answer and try again."
Return
Catch e As System.Configuration.Provider.ProviderException
Msg.Text = "The specified user name does not exist. Please check your value and try again."
End Try
If newPassword <> "" Then
Msg.Text = "Password reset. Your new password is: " & Server.HtmlEncode(newPassword)
Else
Msg.Text = "Password reset failed. Please reenter your values and try again."
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Reset Password</title>
</head>
<body>
<form id="form1" runat="server">
<h3>Reset Password</h3>
<asp:Label id="Msg" runat="server" ForeColor="maroon" /><br />
Username: <asp:Textbox id="UsernameTextBox" Columns="30" runat="server" AutoPostBack="True" />
<asp:RequiredFieldValidator id="UsernameRequiredValidator" runat="server"
ControlToValidate="UsernameTextBox" ForeColor="red"
Display="Static" ErrorMessage="Required" /><br />
Password Question: <b><asp:Label id="QuestionLabel" runat="server" /></b><br />
Answer: <asp:TextBox id="AnswerTextBox" Columns="60" runat="server" Enabled="False" />
<asp:RequiredFieldValidator id="AnswerRequiredValidator" runat="server"
ControlToValidate="AnswerTextBox" ForeColor="red"
Display="Static" ErrorMessage="Required" Enabled="False" /><br />
<asp:Button id="ResetPasswordButton" Text="Reset Password"
OnClick="ResetPassword_OnClick" runat="server" Enabled="False" />
</form>
</body>
</html>
Kommentarer
Den här metoden anropas av klassen Membership för att återställa lösenordet för en användare i den SQL Server databas som anges i ASP.NET-programmets konfigurationsfil (Web.config) till ett nytt, slumpmässigt genererat värde. Det nya lösenordet returneras.
Note
Det slumpmässiga lösenordet som skapas av ResetPassword metoden är inte garanterat att skicka det reguljära uttrycket i egenskapen PasswordStrengthRegularExpression . Det slumpmässiga lösenordet uppfyller dock de kriterier som fastställs av MinRequiredPasswordLength egenskaperna och MinRequiredNonAlphanumericCharacters .
Metoden ResetPassword används oftast när egenskapen är inställd på PasswordFormatHashed. Om en användare glömmer ett lösenord som hashas kan lösenordet inte hämtas. Providern kan dock återställa lösenordet till ett nytt, automatiskt genererat lösenord om användaren tillhandahåller rätt lösenordssvar.
Om ett felaktigt lösenordssvar skickas till ResetPassword metoden ökas den interna räknaren som spårar ogiltiga lösenordsförsök med ett. Detta kan leda till att användaren blir utelåst och inte kan logga in förrän låsstatusen har rensats av ett anrop till UnlockUser metoden. Om rätt lösenordssvar anges och användaren för närvarande inte är utelåst återställs den interna räknaren som spårar ogiltiga lösenordssvarsförsök till noll. Mer information finns i egenskaperna MaxInvalidPasswordAttempts och PasswordAttemptWindow.
Du kan anropa ResetPassword metoden direkt genom att först hämta en referens till instansen SqlMembershipProviderProvider från -egenskapen för Membership klassen. Det genererade lösenordet är minst 14 tecken långt eller längden som anges i MinRequiredPasswordLength egenskapen och innehåller antalet icke-alfanumeriska tecken som anges i MinRequiredNonAlphanumericCharacters egenskapen. Lösenordet är inte garanterat att skicka det reguljära uttrycket som finns i PasswordStrengthRegularExpression egenskapen, om ett anges.
Inledande och avslutande blanksteg trimmas från alla parametervärden.