SqlMembershipProvider.GetPassword(String, String) Yöntem

Tanım

SQL Server üyelik veritabanından belirtilen kullanıcı adı için parolayı döndürür.

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

Parametreler

username
String

Parolasını alacak kullanıcı.

passwordAnswer
String

Kullanıcı için parola yanıtı.

Döndürülenler

String

Belirtilen kullanıcı adının parolası.

Özel durumlar

passwordAnswer geçersizdir.

-veya- tarafından tanımlanan username üyelik kullanıcısı kilitlendi.

username üyelik veritabanında bulunamadı.

-veya- Veritabanından parola alınırken bir hata oluştu.

Parametre değerlerinden biri izin verilen uzunluk üst sınırını aşıyor.

-veya- username boş bir dizedir (""), virgül içerir veya 256 karakterden uzundur.

-veya- passwordAnswer boş bir dizedir ve RequiresQuestionAndAnswer şeklindedir true.

-veya- passwordAnswer 128 karakterden büyük.

-veya- kodlanmış sürümü passwordAnswer 128 karakterden büyük.

username, null değeridir.

-veya- passwordAnswer ve null RequiresQuestionAndAnswer şeklindedir true.

Örnekler

Aşağıdaki kod örneği, belirtilen kullanıcı adının parolasını alır ve kullanıcıya bir e-posta iletisiyle gönderir.

Not

E-posta kullanarak parolayı düz metin olarak döndürmek, yüksek düzeyde güvenlik gerektiren siteler için önerilmez. Yüksek güvenlikli siteler için SSL gibi şifreleme kullanarak parolalar döndürmenizi öneririz.

Not

Bu örnek, sınıfını SqlMembershipProvider kullanarak Web.config dosyasında olarak belirtilen defaultProvider öğesini Membership çağırır. türü SqlMembershipProviderolarak varsayılan sağlayıcıya erişmeniz gerekiyorsa sınıfının özelliğini Membership yayınlayabilirsinizProvider. Belirli bir sağlayıcı türü olarak yapılandırılan diğer sağlayıcılara erişmek için, bu sağlayıcılara sınıfının özelliğiyle Membership yapılandırılmış adlarıyla Providers erişebilir ve bunları belirli sağlayıcı türü olarak yayınlayabilirsiniz.

<%@ 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>

Açıklamalar

Bu yöntem, ASP.NET uygulamasının MembershipUser yapılandırma dosyasında (Web.config) belirtilen SQL Server veritabanından bir kullanıcının parolasını almak için sınıfı tarafından çağrılır.

Yöntemine GetPassword yanlış parola yanıtı sağlanırsa, geçersiz parola yanıtı girişimlerini izleyen iç sayaç bir artırılır. Bu, kullanıcının kilitlenmesine ve yöntem çağrısı tarafından kilit durumu temizleninceye kadar oturum açamamasına UnlockUser neden olabilir. Doğru parola yanıtı sağlandıysa ve kullanıcı şu anda kilitli değilse, geçersiz parola yanıtı girişimlerini izleyen iç sayaç sıfıra sıfırlanır. Daha fazla bilgi için ve PasswordAttemptWindow özelliklerine MaxInvalidPasswordAttempts bakın.

önce sınıfının özelliği aracılığıyla Provider örneğe bir başvuru SqlMembershipProvider alarak yöntemini doğrudan çağırabilirsiniz GetPassword Membership.

PasswordFormat özelliği olarak HashedGetPassword ayarlanırsa yöntemi parolayı alamaz. Karma parolalar tek yönlü olarak şifrelenir ve şifresi çözülemez. PasswordFormat Özellik olarak ayarlanırsa Hashedve EnablePasswordRetrieval olarak ayarlanırsatrue, sağlayıcı başlatıldığında bir ProviderException oluşturulur.

Baştaki ve sondaki boşluklar tüm parametre değerlerinden kırpılır.

Şunlara uygulanır

Ayrıca bkz.