Bài viết này dựa trên auto gene code bởi codesmith. Cần phải gene code trước khi thực hiện bài viết này. Table thực hiện:
Id: PKTenTruyCap: FK
Để thực hiện ứng dụng đăng nhập, đầu tiên cần quan tâm các hàm sau:
- cmdDangNhap_Click
- DoLogin
Tên bài viết: Xây dựng ứng dụng đăng nhập
Tác giả: Quang IT
Cấp độ bài viết: Chưa đánh giá
Tóm tắt:
- Sử dụng gene CodeSmith
- Mã hóa MD5
- Thay thế chuỗi
- Forms authentication
Trang Login.aspx
Sử dụng các control sau: Label, TextBox, ImageButton(hoặc button) và RequiredFieldValidator(ràng buộc ô khai báo)
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="width: 39px"></td>
<td class="hrm_title_grey" style="width: 83px">Tên truy cập</td>
<td width="7" class="hrm_title_grey">:</td>
<td>
<asp:TextBox ID="UserName" CssClass="hrm_textbox" runat="server" Width="180px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" SetFocusOnError="true" CssClass="hrm_title_red" runat="server" ErrorMessage="+ Chưa nhập Tên truy cập!" ControlToValidate="UserName">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td style="width: 39px"></td>
<td class="hrm_title_grey" style="width: 83px">Mật khẩu</td>
<td width="7" class="hrm_title_grey">:</td>
<td>
<asp:TextBox ID="Password" CssClass="hrm_textbox" runat="server" TextMode="Password" Width="180px"></asp:TextBox>
<asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password" CssClass="hrm_title_red" ErrorMessage="+ Chưa nhập Mật khẩu!">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td style="width: 39px"></td>
<td align="right" style="width: 83px"></td>
<td colspan="2" style="padding-left:40px">
<asp:ImageButton ID="cmdDangNhap" ImageUrl="~/Images/login.jpg" runat="server" onclick="cmdDangNhap_Click" />
<asp:ImageButton ID="cmdHuyBo" CausesValidation="false" ImageUrl="~/Images/huy.jpg" OnClientClick="window.close();" runat="server" />
</td>
</tr>
</table>
Tại trang Login.cs
Viết các câu lệnh thực hiện xử lý.
protected void Page_Load(object sender, EventArgs e)
{
//Xóa phiên làm việc
Session.Clear();
FormsAuthentication.SignOut();
}
/// <summary>
/// Xử lý button đăng nhập
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void cmdDangNhap_Click(object sender, ImageClickEventArgs e)
{
//Common.StandardString: Xử lý chuỗi nhập vào, replace các ký tự đặc biệt
string strUserName = Common.StandardString(UserName.Text);
string strPassWord = Common.StandardString(Password.Text);
string strUserCode = strUserName + strPassWord;
//Dùng MD5 để mã hóa
strPassWord = Common.EncryptMD5(strPassWord);
strUserCode = Common.EncryptMD5(strUserCode);
//Gọi hàm DoLogin
DoLogin(strUserName, strPassWord, strUserCode);
}
public void DoLogin(string strUserName, string strPassword, string strUserCode)
{
//NguoiDung: Layer Entities - sử dụng để lấy tên truy cập và so sánh sự tồn tại của nó
//Table Người Dùng được gene code bởi CodeSmith
NguoiDung entNguoiDung = DataRepository.NguoiDungProvider.GetByTenTruyCap(strUserName);
if (entNguoiDung == null)
{
WebMessage.Show("Người dùng không tồn tại trong hệ thống, Xin vui lòng thử lại");
UserName.Focus();
return;
}
string CurrentPassword = entNguoiDung.MatKhau;
string CurrentUserCode = entNguoiDung.MaTruyCap;
string strPassWord = Common.StandardString(Password.Text);
if (strPassword.Equals(CurrentPassword) && strUserCode.Equals(CurrentUserCode))
{
string strUserInfor = string.Format("{0};{1};{2}", entNguoiDung.Id, entNguoiDung.TenTruyCap, entNguoiDung.HoTen);
Session["UserName"] = entNguoiDung.TenTruyCap;
FormsAuthentication.SetAuthCookie(strUserInfor, false);
Response.Redirect("~/AdminCP/HomeAdmin.aspx");
}
else
{
WebMessage.Show("Mật khẩu không đúng, Xin vui lòng thử lại");
Password.Focus();
return;
}
}
using App_code:
Common.cs
/// <summary>
/// Chuẩn hóa chuỗi dữ liệu khi người dùng input
/// Input: sContent (chuỗi cần chuẩn hóa)
/// Output: Chuỗi sau khi replace các ký tự đặc biệt
/// </summary>
public static string StandardString(string sContent)
{
sContent = sContent.Trim();
sContent = sContent.Replace("<td>", "");
sContent = sContent.Replace("</td>", "");
sContent = sContent.Replace("<tr>", "");
sContent = sContent.Replace("</tr>", "");
sContent = sContent.Replace("<table>", "");
sContent = sContent.Replace("</table>", "");
sContent = sContent.Replace("<script", "");
sContent = sContent.Replace("</script>", "");
sContent = sContent.Replace("OR", "");
sContent = sContent.Replace("ALTER", "");
sContent = sContent.Replace("DROP", "");
return sContent;
}
/// <summary>
/// Mã hóa chuỗi thành chuỗi MD5
/// Input: sToEncrypt (Chuỗi cần mã hóa)
/// Output: Chuỗi sau khi mã hóa
/// </summary>
public static string EncryptMD5(string sToEncrypt)
{
System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding();
byte[] bytes = ue.GetBytes(sToEncrypt);
// encrypt bytes
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hashBytes = md5.ComputeHash(bytes);
// Convert the encrypted bytes back to a string (base 16)
string hashString = "";
for (int i = 0; i < hashBytes.Length; i++)
{
hashString += Convert.ToString(hashBytes[i], 16).PadLeft(2, '0');
}
return hashString.PadLeft(32, '0');
}
Ngoài ra, còn phải config web.config để cấu hình timeout
<authentication mode="Forms">
<forms loginUrl="~/AdminCP/Default.aspx" name=".ASPXAUTH" timeout="320"></forms>
</authentication>
Copy ghi rõ nguồn
anh cho em hỏi ứng dụng này chưa phân quyền khi login đúng không ạ? Nếu muốn phân quyền thì làm thế nào ạ? em cám ơn
ReplyDeleteBạn có thể vào đây nghiên cứu: http://dotnet.dngaz.com/2011/12/xay-dung-trang-ang-nhap-trong-aspnet-c.html
ReplyDelete