Khi thành viên đăng ký trên trang web của bạn. Nhưng thành viên quyên mật khẩu họ sẽ có yêu cầu hệ thống gửi lại mật khẩu cho họ qua Email đã đăng ký. Bài viết này mình sẽ hướng dẫn các bạn thực hiện chức năng này.
Giả sử bạn có bảng TB_ThanhVien có các trường cơ bản như sau: TenDangNhap, MatKhau, Email. Khi thành viên có yêu cầu gửi lại mật khẩu cho họ bạn cần xây dựng Form để họ nhập địa chỉ Email đã đăng ký. Form được xây dựng có các thành phần cơ bản như sau:
Giả sử bạn có bảng TB_ThanhVien có các trường cơ bản như sau: TenDangNhap, MatKhau, Email. Khi thành viên có yêu cầu gửi lại mật khẩu cho họ bạn cần xây dựng Form để họ nhập địa chỉ Email đã đăng ký. Form được xây dựng có các thành phần cơ bản như sau:
1. Xây dựng Form
<asp:RequiredFieldValidator id="RequiredFieldValidator4"
runat="server" ControlToValidate="txtEmail" Display="Dynamic"
Font-Size="8pt"> <br />
* Bạn chưa nhập
email
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator id="RegularExpressionValidator2"
runat="server" ControlToValidate="txtEmail" Display="Dynamic"
Font-Size="8pt" SetFocusOnError="True"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
<br>
*Email chưa hợp lệ
</asp:RegularExpressionValidator>
<asp:TextBox id="txtEmail" runat="server" CssClass="textForm"
Width="282px" />
<asp:Button id="btnGuiYeuCau"
runat="server" OnClick="btnGuiYeuCau_Click" Text="Gửi yêu cầu" />
Form mình xây dựng như hình minh họa sau
Trong code bạn cần thực hiện các hàm sau:
2. Viết các hàm tạo mật khẩu ngẫu nhiên và hàm mã hóa mật khẩu
Bạn cần gửi mật khẩu cho thành viên bằng một chuỗi ngẫu nhiên được lấy từ tập các ký tự alphabet và các số. Hàm sau sẽ tạo hàm ngẫu nhiên với độ dài của chuỗi được truyền vào tham số, Và một hàm mã hóa chuỗi mật khẩu đó vì MatKhau trong Database bạn cần mã hóa nó
public string CreateLostPassword(int PasswordLength)
{
string _allowedChars = "abcdefghijk0123456789mnopqrstuvwxyz";
Random
randNum = new Random(); char[] chars = new char[PasswordLength];
int allowedCharCount = _allowedChars.Length;
for (int i = 0; i
< PasswordLength; i++)
{
chars[i] =
_allowedChars[(int)((_allowedChars.Length) * randNum.NextDouble())];
}
return new string(chars);
}
public string MaHoaMatKhau(string
password)
{
UnicodeEncoding encoding = new UnicodeEncoding();
Byte[] hashBytes = encoding.GetBytes(password); // Compute the SHA-1
hash SHA1CryptoServiceProvider sha1 = new
SHA1CryptoServiceProvider();
Byte[] cryptPassword =
sha1.ComputeHash(hashBytes);
return
BitConverter.ToString(cryptPassword);
}
Tiếp theo bạn cần viết các hàm
để đổi mật khẩu cho thành viên và hàm lấy TenDangNhap qua Email (Bạn
phải đảm bảo Email là duy nhất - Có thể tạo bằng khóa Uniquy).
Tham
khảo thêm bài viết Xây dựng trang đăng nhập trong asp.net - C#
3. Các hàm truy vấn và cập nhật mật khẩu
Ở đây mình viết bằng cách truy vấn trực tiếp trong câu lệnh. Bạn có thể sửa bằng cách viết các Store để thực hiện
Ở đây mình viết bằng cách truy vấn trực tiếp trong câu lệnh. Bạn có thể sửa bằng cách viết các Store để thực hiện
private void CapNhatMatKhau(string TenDangNhap, string MatKhau)
{
string connectString = @"Server =.\SQL2005;
Initial
Catalog=DataBaseNamr;User ID=sa;Password=******";
string queryUpdate
= @"UPDATE TB_ThanhVien SET MatKhau="+MatKhau+" WHERE
TenDangNhap="+TenDangNhap;
SqlConnection conn = new
SqlConnection(connectString);
try { conn.Open();
// Thực thi câu lệnh
Update SqlCommand cmdInsert = new
SqlCommand(queryUpdate, conn); cmdInsert.ExecuteNonQuery();
}
catch (SqlException ex)
{
Console.WriteLine("Error: " +
ex);
}
finally { conn.Close();
}
}
private
DataTable LayTenDangNhap(string Email)
{
DataTable dtbTmp = new
DataTable();
string connString = @"Server =.\SQL2005;Initial
Catalog=DataBaseNamr;User ID=sa;Password=******";
string sql =
@"SELECT TenDangNhap FROM TB_ThanhVien WHERE Email=" + Email;
SqlConnection conn = new SqlConnection(connString);
try {
// Mở kết nối
conn.Open();
SqlDataAdapter da = new
SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds, "DangNhap");
dtbTmp = ds.Tables[0];
}
catch
(Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
// Đóng kết nối
conn.Close();
}
return dtbTmp;
}
Tiếp theo mình cần viết các hàm lấy nội dung và thực
hiện trong sự kiện của nut "Gửi yêu cầu".
4. Các hàm lấy nội dung gửi mail và thực hiện sự kiện Click
Để thực hiện gửi mail mình sẽ dùng lớp System.Web.Mail. Và mình dùng Email mặc định để gửi mail là admincnttvn@gmail.com (Bạn có thể thay bằng Mail của bạn) Các hàm được viết như sau:
private string NoiDungMail()
{
string NoiDung = "";
DataTable
dtb = LayTenDangNhap(txtEmail.Text + "");
string MatKhauMoi = "",
TenDangNhap = "";
if (dtb.Rows.Count > 0)
{
NoiDung =
"Đây là Mail gửi đến từ website của Yourwebsite..<br>";
MatKhauMoi = CreateLostPassword(7); NoiDung += "Mật khẩu mới của
bạn là: " + MatKhauMoi;
TenDangNhap =
dtb.Rows[0]["TenDangNhap"]+"");
DoiMatKhau(TenDangNhap,
MaHoaMatKhau(MatKhauMoi));
NoiDung += "<br>Sau khi đăng
nhập bạn nˆn đổi lại mật khẩu để tiện cho việc đăng nhập lần tiếp theo";
NoiDung += "<br><br><hr>Vui lòng không trả
lời Mail này!";
}
return NoiDung;
}
protected void
btnGuiYeuCau_Click(object sender, EventArgs e)
{
MailMessage
objEmail = new MailMessage();
DataTable dtb =
LayTenDangNhap(txtEmail.Text + "");
if (dtb.Rows.Count > 0)
{
objEmail.To = txtEmail.Text + "";
objEmail.From =
"admincnttvn@gmail.com";
objEmail.Subject = "Thông tin về mật khẩu
của bạn";
objEmail.BodyEncoding = Encoding.UTF8;
objEmail.Body = NoiDungMail();
objEmail.Priority =
MailPriority.High;
objEmail.BodyFormat = MailFormat.Html;
try { SmtpMail.Send(objEmail);
ScriptManager.RegisterStartupScript(this, this.GetType(), "redirectMe",
"alert('Chúng tôi đã gửi mật khẩu cho bạn.\\n\\n Vui lòng check mail để
lấy lại mật khẩu!');
location.href='LoginInfo.aspx';", true);
}
catch (Exception exc)
{
Response.Write("Send
failure: " + exc.ToString());
}
}
else
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "redirectMe",
"alert('Email của bạn chưa đăng ký!');", true);
}
}
Trong
hàm trên bạn thấy mình sử dụng hàm tạo mật khẩu CreateLostPassword(7)
sẽ tạo cho Thành viên một mật khẩu mới có độ dài là 7 ký tự và các ký
tự này được lấy ngấu nhiên trong dãy chữ và số.
Kết quả nhận được qua Email như sau:
Nguồn hmweb
0 comments:
Post a Comment