SqlMembershipProvider.GetPassword(String, String) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengembalikan kata sandi untuk nama pengguna yang ditentukan dari database keanggotaan 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
Parameter
- username
- String
Pengguna untuk mengambil kata sandi.
- passwordAnswer
- String
Jawaban kata sandi untuk pengguna.
Mengembalikan
Kata sandi untuk nama pengguna yang ditentukan.
Pengecualian
passwordAnswer
tidak valid.
-atau-
Pengguna keanggotaan yang diidentifikasi oleh username
dikunci.
EnablePasswordRetrieval diatur ke false
.
username
tidak ditemukan dalam database keanggotaan.
-atau-
Terjadi kesalahan saat mengambil kata sandi dari database.
Salah satu nilai parameter melebihi panjang maksimum yang diizinkan.
-atau-
username
adalah string kosong (""), berisi koma, atau lebih panjang dari 256 karakter.
-atau-
passwordAnswer
adalah string kosong dan RequiresQuestionAndAnswer adalah true
.
-atau-
passwordAnswer
lebih besar dari 128 karakter.
-atau-
Versi yang dikodekan lebih besar dari passwordAnswer
128 karakter.
Contoh
Contoh kode berikut mengambil kata sandi untuk nama pengguna tertentu dan mengirimkannya kepada pengguna dalam pesan email.
Catatan
Mengembalikan kata sandi dalam teks yang jelas menggunakan email tidak disarankan untuk situs yang memerlukan tingkat keamanan tinggi. Untuk situs keamanan tinggi, kami sarankan Anda mengembalikan kata sandi menggunakan enkripsi, seperti SSL.
Catatan
Sampel ini memanggil SqlMembershipProvider yang ditentukan sebagai defaultProvider
dalam file Web.config dengan menggunakan Membership kelas . Jika Anda perlu mengakses penyedia default sebagai jenis SqlMembershipProvider, Anda dapat melemparkan Provider properti kelas Membership . Untuk mengakses penyedia lain yang dikonfigurasi sebagai jenis penyedia tertentu, Anda dapat mengaksesnya dengan nama yang dikonfigurasi dengan Providers properti Membership kelas dan mentransmisikannya sebagai jenis penyedia tertentu.
<%@ 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>
Keterangan
Metode ini dipanggil oleh MembershipUser kelas untuk mengambil kata sandi untuk pengguna dari database SQL Server yang ditentukan dalam file konfigurasi aplikasi ASP.NET (Web.config).
Jika jawaban kata sandi yang salah diberikan ke GetPassword metode , penghitung internal yang melacak upaya jawaban kata sandi yang tidak valid akan bertambah satu per satu. Ini dapat mengakibatkan pengguna dikunci dan tidak dapat masuk hingga status kunci dibersihkan oleh panggilan ke UnlockUser metode . Jika jawaban kata sandi yang benar diberikan dan pengguna saat ini tidak dikunci, maka penghitung internal yang melacak upaya jawaban kata sandi yang tidak valid diatur ulang ke nol. Untuk informasi selengkapnya, lihat properti MaxInvalidPasswordAttempts dan PasswordAttemptWindow.
Anda dapat memanggil metode secara GetPassword langsung dengan terlebih dahulu mendapatkan referensi ke SqlMembershipProvider instans melalui Provider properti Membership kelas .
PasswordFormat Jika properti diatur ke Hashed, GetPassword metode tidak dapat mengambil kata sandi. Kata sandi yang di-hash dienkripsi satu arah dan tidak dapat didekripsi.
PasswordFormat Jika properti diatur ke Hashed, dan EnablePasswordRetrieval diatur ke true
, ProviderException akan dilemparkan saat penyedia diinisialisasi.
Spasi di depan dan di belakang dipangkas dari semua nilai parameter.