SqlMembershipProvider.GetPassword(String, String) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
Belirtilen kullanıcı adının parolası.
Özel durumlar
passwordAnswer
geçersizdir.
-veya-
tarafından tanımlanan username
üyelik kullanıcısı kilitlendi.
EnablePasswordRetrieval olarak ayarlanır false
.
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.
Ö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ğlanırsa 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 MaxInvalidPasswordAttempts ve PasswordAttemptWindow özelliklerine 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 GetPasswordMembership.
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.