سفارشی ساختن کنترل تغییر رمز عبور بدون استفاده از Membership Provider در Asp.Net
سه شنبه 4 فروردین 1394در این مقاله نحوه سفارشی سازی تغییر رمز عبور بدون استفاده از کلاس Membership Provider در Asp.Net با استفاده از دستورات #C و VB.Net را شرح میدهیم .
برای سفارشی ساختن امکان تغییر رمز عبور مراحل زیر را انجام می دهیم .
در ابتدا یک بانک اطلاعاتی با نام LoginDB میسازیم ,سپس یک جدول با نام Users در داخل بانک ساخته شده ایجاد می کنیم .

سپس رکوردهای مورد نظر را به صورت پیش فرض تکمیل میکنیم :

تگ HTML شامل کنترل ChangePassword و یک Label می باشد , برای کنترل ChangePassword شامل خصوصیات زیر میباشد :
1 - OnChangingPassword : این رویداد روند تغییر پسورد را مدیریت می کند .
2 - CancelDestinationPageUrl : در صورت کلیک دکمه Cancel کاربر را به صفحه مشخص شده هدایت می کند.
3 - NewPasswordRegularExpression : برای اعتبار سنجی بیشتر سیاست تولید رمز استفاده میشود .که در حال حاضر ما میخواهیم کاربر را محدود کنیم که حد اقل 5 کلمه برای رمز عبور وارد نماید .
4 - NewPasswordRegularExpressionErrorMessage : پیغام خطا میباشد که در صورت مجاز نبودن رمز وارد شده جدید با سیاست تعیین شده توسط ما نمایش داده میشود .
تگ label برای نمایش موفقیت در اعمال تغییر رمز استفاده میشود :
<asp:ChangePassword ID="ChangePassword1" runat="server" OnChangingPassword="OnChangingPassword"
RenderOuterTable="false" NewPasswordRegularExpression="^[\s\S]{5,}$" NewPasswordRegularExpressionErrorMessage="Password must be of minimum 5 characters." CancelDestinationPageUrl = "~/Home.aspx">
</asp:ChangePassword>
<br />
<asp:Label ID="lblMessage" runat="server" />
ما باید namespace های مورد نظر را نیز به پروژه اضافه کنیم :
کد #C :
using System.Drawing; using System.Configuration; using System.Data.SqlClient;
کد VB.NET :
Imports System.Drawing Imports System.Configuration Imports System.Data.SqlClient
زمانی که دکمه ChangePassword را کلیک میکنیم رویداد اجرا میشود .اول از همه چک میشود که رمز جدید با رمز قبلی یکی نباشد , در صورت یکی بودن label داخل کنترل پیغام خطایی را نمایش می دهد .سپس چک میکند که حتمی حد اقل از 1 کلمه بیشتر باشد , و مجدد با سیاست تعیین شده کلمات وارد شده را مطابقت می دهد .
کد #C :
protected void OnChangingPassword(object sender, LoginCancelEventArgs e)
{
if (!ChangePassword1.CurrentPassword.Equals(ChangePassword1.NewPassword, StringComparison.CurrentCultureIgnoreCase))
{
int rowsAffected = 0;
string query = "UPDATE [Users] SET [Password] = @NewPassword WHERE [Username] = @Username AND [Password] = @CurrentPassword";
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(query))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Parameters.AddWithValue("@Username", this.Page.User.Identity.Name);
cmd.Parameters.AddWithValue("@CurrentPassword", ChangePassword1.CurrentPassword);
cmd.Parameters.AddWithValue("@NewPassword", ChangePassword1.NewPassword);
cmd.Connection = con;
con.Open();
rowsAffected = cmd.ExecuteNonQuery();
con.Close();
}
}
if (rowsAffected > 0)
{
lblMessage.ForeColor = Color.Green;
lblMessage.Text = "Password has been changed successfully.";
}
else
{
lblMessage.ForeColor = Color.Red;
lblMessage.Text = "Password does not match with our database records.";
}
}
}
else
{
lblMessage.ForeColor = Color.Red;
lblMessage.Text = "Old Password and New Password must not be equal.";
}
e.Cancel = true;
}
کد VB.NET :
Protected Sub OnChangingPassword(sender As Object, e As LoginCancelEventArgs)
If Not ChangePassword1.CurrentPassword.Equals(ChangePassword1.NewPassword, StringComparison.CurrentCultureIgnoreCase) Then
Dim rowsAffected As Integer = 0
Dim query As String = "UPDATE [Users] SET [Password] = @NewPassword WHERE [Username] = @Username AND [Password] = @CurrentPassword"
Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Using con As New SqlConnection(constr)
Using cmd As New SqlCommand(query)
Using sda As New SqlDataAdapter()
cmd.Parameters.AddWithValue("@Username", Me.Page.User.Identity.Name)
cmd.Parameters.AddWithValue("@CurrentPassword", ChangePassword1.CurrentPassword)
cmd.Parameters.AddWithValue("@NewPassword", ChangePassword1.NewPassword)
cmd.Connection = con
con.Open()
rowsAffected = cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
If rowsAffected > 0 Then
lblMessage.ForeColor = Color.Green
lblMessage.Text = "Password has been changed successfully."
Else
lblMessage.ForeColor = Color.Red
lblMessage.Text = "Password does not match with our database records."
End If
End Using
Else
lblMessage.ForeColor = Color.Red
lblMessage.Text = "Old Password and New Password must not be equal."
End If
e.Cancel = True
End Sub
اگر شما از .net framework 4 یا بالاتر استفاده می کنید ممکن است که با پیغام خطا مواجه شوید , برای رفع این مشکل تگ زیر را در داخل System.Web اضافه میکنید :
<pages controlRenderingCompatibilityVersion = "3.5"></pages>
- ASP.net
- 3k بازدید
- 3 تشکر