سفارشی ساختن کنترل تغییر رمز عبور بدون استفاده از 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 تشکر