SqlMembershipProvider.GetPassword(String, String) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Retourne le mot de passe pour le nom d'utilisateur spécifié de la base de données d'appartenances SQL Server.
public:
override System::String ^ GetPassword(System::String ^ username, System::String ^ passwordAnswer);
public override string GetPassword (string username, string passwordAnswer);
override this.GetPassword : string * string -> string
Public Overrides Function GetPassword (username As String, passwordAnswer As String) As String
Paramètres
- username
- String
Utilisateur pour lequel récupérer le mot de passe.
- passwordAnswer
- String
Réponse de mot de passe de l'utilisateur.
Retours
Mot de passe pour le nom d’utilisateur spécifié.
Exceptions
passwordAnswer
n'est pas valide.
- ou -
L'utilisateur d'appartenance identifié par username
est verrouillé.
EnablePasswordRetrieval a la valeur false
.
username
est introuvable dans la base de données d'appartenances.
- ou -
Une erreur s'est produite lors de la récupération du mot de passe dans la base de données.
L'une des valeurs de paramètre dépasse la longueur maximale autorisée.
- ou -
username
est une chaîne vide (""), contient une virgule ou dépasse 256 caractères.
- ou -
passwordAnswer
est une chaîne vide et RequiresQuestionAndAnswer a la valeur true
.
- ou -
passwordAnswer
dépasse 128 caractères.
- ou -
La version codée de passwordAnswer
dépasse 128 caractères.
username
a la valeur null
.
- ou -
passwordAnswer
a la valeur null
et RequiresQuestionAndAnswer a la valeur true
.
Exemples
L’exemple de code suivant récupère le mot de passe d’un nom d’utilisateur spécifié et l’envoie à l’utilisateur dans un e-mail.
Notes
Le renvoi d’un mot de passe en texte clair à l’aide d’un e-mail n’est pas recommandé pour les sites qui nécessitent un niveau de sécurité élevé. Pour les sites à haute sécurité, nous vous recommandons de retourner des mots de passe à l’aide d’un chiffrement, tel que SSL.
Notes
Cet exemple appelle le SqlMembershipProvider spécifié comme defaultProvider
dans le fichier Web.config à l’aide de la Membership classe . Si vous devez accéder au fournisseur par défaut en tant que type SqlMembershipProvider, vous pouvez caster la Provider propriété de la Membership classe . Pour accéder à d’autres fournisseurs configurés en tant que type de fournisseur spécifique, vous pouvez y accéder par leur nom configuré avec la Providers propriété de la Membership classe et les caster en tant que type de fournisseur spécifique.
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Net.Mail" %>
<!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.EnablePasswordRetrieval)
{
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 re-enter.";
QuestionLabel.Text = "";
QuestionLabel.Enabled = false;
AnswerTextBox.Enabled = false;
EmailPasswordButton.Enabled = false;
}
else
{
QuestionLabel.Text = user.PasswordQuestion;
QuestionLabel.Enabled = true;
AnswerTextBox.Enabled = true;
EmailPasswordButton.Enabled = true;
}
}
public void EmailPassword_OnClick(object sender, EventArgs args)
{
// Note: Returning a password in clear text using email is not recommended for
// sites that require a high level of security.
try
{
string password = Membership.Provider.GetPassword(UsernameTextBox.Text, AnswerTextBox.Text);
MembershipUser u = Membership.GetUser(UsernameTextBox.Text);
EmailPassword(u.Email, password);
Msg.Text = "Your password was sent via email.";
}
catch (MembershipPasswordException e)
{
Msg.Text = "The password answer is incorrect. Please check the value and try again.";
}
catch (System.Configuration.Provider.ProviderException e)
{
Msg.Text = "An error occurred retrieving your password. Please check your values " +
"and try again.";
}
}
private void EmailPassword(string email, string password)
{
try
{
MailMessage Message = new MailMessage("administrator", email);
Message.Subject = "Your Password";
Message.Body = "Your password is: " + Server.HtmlEncode(password);
SmtpClient SmtpMail = new SmtpClient("SMTPSERVER");
SmtpMail.Send(Message);
}
catch
{
Msg.Text = "An exception occurred while sending your password. Please try again.";
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Retrieve Password</title>
</head>
<body>
<form id="form1" runat="server">
<h3>Retrieve 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="EmailPasswordButton" Text="Email My Password"
OnClick="EmailPassword_OnClick" runat="server" Enabled="false" />
</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Net.Mail" %>
<!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(ByVal sender As Object, ByVal args As EventArgs)
If Not Membership.EnablePasswordRetrieval Then
FormsAuthentication.RedirectToLoginPage()
End If
Msg.Text = ""
If Not IsPostBack Then
Msg.Text = "Please enter a user name."
Else
VerifyUsername()
End If
End Sub
Private 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 re-enter."
QuestionLabel.Text = ""
QuestionLabel.Enabled = False
AnswerTextBox.Enabled = False
EmailPasswordButton.Enabled = False
Else
QuestionLabel.Text = user.PasswordQuestion
QuestionLabel.Enabled = True
AnswerTextBox.Enabled = True
EmailPasswordButton.Enabled = True
End If
End Sub
Public Sub EmailPassword_OnClick(ByVal sender As Object, ByVal args As EventArgs)
' Note: Returning a password in clear text using email is not recommended for
' sites that require a high level of security.
Try
Dim password As String = Membership.Provider.GetPassword(UsernameTextBox.Text, AnswerTextBox.Text)
Dim u As MembershipUser = Membership.GetUser(UsernameTextBox.Text)
EmailPassword(u.Email, password)
Msg.Text = "Your password was sent via email."
Catch e As MembershipPasswordException
Msg.Text = "The password answer is incorrect. Please check the value and try again."
Catch e As System.Configuration.Provider.ProviderException
Msg.Text = "An error occurred retrieving your password. Please check your values " & _
"and try again."
End Try
End Sub
Private Sub EmailPassword(ByVal email As String, ByVal password As String)
Try
Dim Message As MailMessage = New MailMessage("administrator", email)
Message.Subject = "Your Password"
Message.Body = "Your password is: " & Server.HtmlEncode(password)
Dim SmtpMail As SmtpClient = New SmtpClient("SMTPSERVER")
SmtpMail.Send(Message)
Catch
Msg.Text = "An exception occurred while sending your password. Please try again."
End Try
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Retrieve Password</title>
</head>
<body>
<form id="form1" runat="server">
<h3>
Retrieve 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="EmailPasswordButton" Text="Email My Password" OnClick="EmailPassword_OnClick"
runat="server" Enabled="False" />
</form>
</body>
</html>
Remarques
Cette méthode est appelée par la MembershipUser classe pour récupérer le mot de passe d’un utilisateur à partir de la base de données SQL Server spécifiée dans le fichier de configuration de l’application ASP.NET (Web.config).
Si une réponse de mot de passe incorrecte est fournie à la GetPassword méthode, le compteur interne qui effectue le suivi des tentatives de mot de passe-réponse non valides est incrémenté d’un. Cela peut entraîner le verrouillage de l’utilisateur et l’impossibilité de se connecter tant que l’état du verrou n’est pas effacé par un appel à la UnlockUser méthode. Si la réponse de mot de passe correcte est fournie et que l’utilisateur n’est pas actuellement verrouillé, le compteur interne qui effectue le suivi des tentatives de réponse de mot de passe non valides est réinitialisé à zéro. Pour plus d’informations, consultez les propriétés MaxInvalidPasswordAttempts et PasswordAttemptWindow.
Vous pouvez appeler la GetPassword méthode directement en obtenant d’abord une référence à l’instance SqlMembershipProvider via la Provider propriété de la Membership classe .
Si la propriété a la PasswordFormatHashedvaleur , la GetPassword méthode ne peut pas récupérer le mot de passe. Les mots de passe hachés sont chiffrés unidirectionnel et ne peuvent pas être déchiffrés. Si la PasswordFormat propriété a la Hashedvaleur , et EnablePasswordRetrieval a la valeur true
, un ProviderException est levée lorsque le fournisseur est initialisé.
Les espaces de début et de fin sont supprimés de toutes les valeurs de paramètre.