Tạo tài khoản bằng Email hoặc số điện thoại làquá trình tạo tài khoản bằngemail hoặc số điện thoại thường được thực hiện trong các ứng dụng hoặctrang web để xác thực người dùng và cung c
Trang 1ĐỀ TÀI THUYẾT TRÌNH
Create account by Email or phone number
NGÀNH:CÔNG NGHỆ THÔNG TIN
Giảng viên hướng dẫn: Nguyễn Mạnh Hùng
Nhóm 4 : Trương Thanh Tâm: 2180603896
Huỳnh Ngọc Hải : 2180606759 Nguyễn Minh Nhựt: 2180601062
Nguyễn Thành Đạt: 2180606116
Lớp : 21THB5
TP Hồ Chí Minh, 2023
I.Tạo tài khoản bằng Email hoặc số điện thoại.
Ộ GIÁO DỤC VÀ ĐÀO T OẠ
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH
Trang 2Tạo tài khoản bằng Email hoặc số điện thoại là quá trình tạo tài khoản bằng email hoặc số điện thoại thường được thực hiện trong các ứng dụng hoặc trang web để xác thực người dùng và cung cấp quyền truy cập vào dịch vụ hoặc ứng dụng.
II Các bước tạo 1 tài khoản bằng Email hoặc số điện thoại.
1 Người dùng chọn tạo tài khoản: Người dùng truy cập trang web hoặc ứng dụng và chọn tạo một tài khoản mới.
2 Nhập thông tin đăng nhập: Người dùng cung cấp thông tin cần thiết để đăng nhập tài khoản Thông tin này có thể bao gồm:
● Địa chỉ email hoặc số điện thoại di động: Người dùng chọn cách đăng nhập bằng cách nhập email hoặc số điện thoại.
● Mật khẩu: Người dùng chọn một mật khẩu an toàn để bảo vệ tài khoản.
● Khác thông tin cá nhân: Tùy theo ứng dụng hoặc trang web cụ thể, người dùng có thể yêu cầu cung cấp thông tin cá nhân khác như tên, ngày sinh, giới tính, vv.
3 Xác thực thông tin: Sau khi người dùng cung cấp thông tin, hệ thống thường sẽ thực hiện một số kiểm tra và xác thực thông tin để đảm bảo tính hợp lệ và an toàn của dữ liệu.
4 Xác thực email hoặc số điện thoại: Nếu người dùng chọn đăng nhập bằng email, hệ thống sẽ gửi một email xác thực đến địa chỉ email mà người dùng đã cung cấp Email này chứa một liên kết hoặc xác thực mã hóa Nếu người dùng chọn đăng ký bằng số điện thoại, hệ thống sẽ gửi một tin nhắn SMS chứa mã xác thực đến số điện thoại đã nhập.
5 Xác thực xác thực mã hóa: Người dùng truy cập email hoặc điện thoại
di động của họ để lấy mã xác thực Người dùng nhập mã xác thực vào ứng dụng hoặc trang web để hoàn tất quá trình đăng ký.
6 Hoàn thành đăng ký: Sau khi người dùng xác thực thành công, tài khoản của họ sẽ được tạo và họ có thể bắt đầu sử dụng dịch vụ hoặc ứng dụng
III Sự an toàn trong việc đăng kí và sử dụng tài khoản
Trang 3Với nhu cầu và sự phát triển mạnh mẽ của internet, việc đăng ký cho mình 1 tài khoản mạng xã hội hay gmail,vv thật sự rất quan trọng Và để an toàn bảo mật thông tin cho người dùng thì ta cần tới đó chính là mã OTP Quy trình đảm bảo tính bảo mật và xác thực của tài khoản người dùng và chắc chắn rằng chỉ có người dùng thực sự mới có thể truy cập vào tài khoản của họ.
*Các hình thức gửi mã OTP:
1 Gửi OTP qua email
Để gửi OTP (Mật khẩu một lần) mã hóa qua email trong ứng dụng của bạn, bạn cần sử dụng một email dịch vụ hoặc một email thư viện trong trình cài đặt ngôn ngữ mà bạn đang sử dụng Một số bước để thực hiện các bước điều này:
Bước 1: Đăng ký tài khoản với một email dịch vụ hoặc sử dụng email dịch vụ hiện có Trước tiên, bạn cần có một email tài khoản (ví dụ: Gmail) hoặc có thể sử dụng một dịch vụ SMTP như SendGrid, SMTP2GO hoặc Amazon SES.
Bước 2: Tích hợp email thư viện hoặc sử dụng email thư viện hoặc
sử dụng email API Sử dụng email thư viện (ví dụ: NET SmtpClient): Nếu bạn đang sử dụng trình cài đặt ngôn ngữ NET (C#), bạn có thể sử dụng thư viện SmtpClient có sẵn trong thư viện NET Framework để gửi email Dưới đây là ví dụ sử dụng SmtpClient để gửi email trong C#:
2 Gửi OTP qua tin nhắn SMS
Ngày nay, việc sử dụng SMS OTP để gửi mã xác minh hay thông tin bảo mật tài khoản đang được doanh nghiệp ưa chuộng hơn hết bởi
vì chúng được gửi đến thuê bao của khách hàng tức thì khi họ đăng ký hoặc sử dụng dịch vụ từ website/hệ thống của bạn API được xem là một giao thức kết nối giữa hệ thống của doanh nghiệp (ERP, CRM, HRM có sẵn…) với chương trình SMS để gửi tin nhắn OTP đến người dùng.SMS OTP được gửi kết hợp với hình thức SMS Brandname - tin nhắn kèm tên thương hiệu, tên doanh nghiệp ở mục người gửi Bran
Trang 4IV Cách tạo đăng ký tài khoản bằng Email hoặc số điện thoại):
1 Tạo một form đăng nhập
Bước 1: Nhập tên người dùng
Bước 2: Nhập tên tài khoản
Bước 2: Mật khẩu
Bước 3: Xác nhận mật khẩu
Bước 4: Gửi OTP xác nhận 2 lớp
Code đăng kí của form đăng kí tài khoản
//Tiến hành đăng kí
private voidbtndangki_Click(objectsender, EventArgs e)
Trang 5MessageBox.Show("Mật khẩu không trùng khớp, vui lòng nhập lại","Lỗi");
txtrepassword.Clear();
return;
}
else
{
stringnameid = txtname.Text;
stringemailOrPhoneNumber = txtemailhaysdt.Text;
stringpassword =this.txtpassword.Text;
if(!otpEntered)
{
MessageBox.Show("Vui lòng gửi mã OTP trước khi đăng ký.");
return;
}
stringenteredOTP = txtcheckOTP.Text.Trim();
if(string.IsNullOrEmpty(enteredOTP))
{
MessageBox.Show("Vui lòng nhập mã OTP trước khi đăng ký.");
return;
}
if(IsEmailOrPhoneExists(emailOrPhoneNumber))
{
MessageBox.Show("Email hoặc số điện thoại đã tồn tại!");
}
else
{
User newUser =newUser
{
name = nameid,
Email = emailOrPhoneNumber,
PasswordHash = password,
};
users.Add(newUser);
MessageBox.Show("Đăng ký thành công!");
DanhsachTaiKhoan.Items.Add($"Tên người dùng:{nameid}||| Tên tài khoản:{emailOrPhoneNumber}
");
txtname.Clear();
txtpassword.Clear();
txtrepassword.Clear();
txtemailhaysdt.Clear();
txtcheckOTP.Clear();
otpEntered =false;
}
}
}
Code Check email hoặc số điện thoại có trùng hay không
//check
private boolIsEmailOrPhoneExists(stringemailOrPhone)
{
Trang 6private voidtxtemailhaysdt_TextChanged(objectsender, EventArgs e) {
stringemailOrPhone = txtemailhaysdt.Text.Trim();
if(IsEmailOrPhoneExists(emailOrPhone))
{
MessageBox.Show("Tài khoản này đã tồn tại!");
}
}
Code Gửi OTP
//Gửi OTP
private voidbtnGuiOTP_Click(objectsender, EventArgs e)
{
try
{
otp = random.Next(100000, 100000000);
varfromAddress =newMailAddress("hai099089@gmail.com");
vartoAddress =newMailAddress(txtemailhaysdt.ToString());
const stringfrompass ="bvrd eiqw khei kzpw";
const stringsubject ="OTP Code";
stringbody = otp.ToString();
varsmtp =newSmtpClient
{
Host ="smtp.gmail.com",
Port = 587,
EnableSsl =true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials =false,
Credentials =newNetworkCredential(fromAddress.Address, frompass), Timeout = 200000
};
using(varmessage =newMailMessage(fromAddress, toAddress) {
Subject = subject,
Body = body
})
{
smtp.Send(message);
}
// Chỉ đặt otpEntered thành true sau khi gửi thành công
MessageBox.Show("OTP đã được gửi qua mail!");
otpEntered =true;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
Trang 7stringaccountSid ="ACd9d358c3ece319c6ff95d71001ae02bf";//SID
stringauthToken ="447b8e56607d05aa734376452a553127";
TwilioClient.Init(accountSid, authToken);
stringotpCode = otp.ToString();// Mã OTP đã tạo
try
{
varmessageOptions =newCreateMessageOptions(newPhoneNumber("+84337883917"));//đây là số mình dk trên hệ thống dùng thử nên chỉ được 1 số để nhận tin nhắn qua API Nếu muốn được nhập số nào trả OTP về số đó thì tốn rất nhiều tiền nên mn thông cảm vì kinh tế k cho phép nhé!
messageOptions.From =newPhoneNumber("+15168644357");//Số Tổng đài
messageOptions.MessagingServiceSid ="MGcef5150a17a24a6a3e889ab297819b7c";
messageOptions.Body = otp.ToString();
phoneOTP = otp.ToString();
varmessage = MessageResource.Create(messageOptions);
Console.WriteLine(message.Body);
MessageBox.Show("OTP gửi thành công!","Success", MessageBoxButtons.OK);
otpEntered =true;
}
catch(Exception ex)
{
MessageBox.Show($"Failed to send OTP Error:{ex.Message}","Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Code xác nhận Mã OTP
private voidbtnxacnhan_Click(objectsender, EventArgs e)
{
if(otpEntered)
{
stringenteredOTP = txtcheckOTP.Text.Trim();
if(!string.IsNullOrEmpty(enteredOTP))
{
Console.WriteLine($"phoneOTP:{phoneOTP} );"
Console.WriteLine($"enteredOTP:{enteredOTP} );"
if(phoneOTP.Equals(enteredOTP))// So sánh với mã OTP của số điện thoại
{
MessageBox.Show("Xác minh thành công OTP");
}
else
{
MessageBox.Show("OTP Không chính xác");
}
}
else
{
MessageBox.Show("Vui lòng nhập mã OTP trước khi xác minh.");
}
}
else
Trang 8}
}
}
V.Full code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Linq.Expressions;
usingSystem.Net;
usingSystem.Net.Mail;
usingSystem.Runtime.Remoting.Contexts;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
using staticdetailaptrinhwindao.Form1;
using staticSystem.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
using staticSystem.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
usingTwilio;
usingTwilio.Rest.Api.V2010.Account;
usingTwilio.Types;
namespacedetailaptrinhwindao
{
public partial classForm1: Form
{
privateList<User> users =newList<User>();
privateRandom random =newRandom();
private boolotpEntered =false;
private intotp;
private stringphoneOTP;
publicForm1()
{
InitializeComponent();
}
private boolIsEmailOrPhoneExists(stringemailOrPhone)
{
returnusers.Any(u => u.Email == emailOrPhone || u.NumBerPhone == emailOrPhone); }
private boolIsEmailFormat(stringinput)
{
try
{
varaddress =newSystem.Net.Mail.MailAddress(input);
returnaddress.Address == input;
Trang 9return false;
}
}
private voidtxtemailhaysdt_TextChanged(objectsender, EventArgs e) {
stringemailOrPhone = txtemailhaysdt.Text.Trim();
if(IsEmailOrPhoneExists(emailOrPhone))
{
MessageBox.Show("Tài khoản này đã tồn tại!");
}
}
private voidForm1_Load(objectsender, EventArgs e)
{
txtemailhaysdt.TextChanged += txtemailhaysdt_TextChanged;
}
private voidbtnthoat_Click(objectsender, EventArgs e)
{
Application.Exit();
}
private voidbtndangki_Click(objectsender, EventArgs e)
{
if(txtrepassword.Text != txtpassword.Text)
{
MessageBox.Show("Mật khẩu không trùng khớp, vui lòng nhập lại","Lỗi"); txtrepassword.Clear();
return;
}
else
{
stringnameid = txtname.Text;
stringemailOrPhoneNumber = txtemailhaysdt.Text;
stringpassword =this.txtpassword.Text;
if(!otpEntered)
{
MessageBox.Show("Vui lòng gửi mã OTP trước khi đăng ký.");
return;
}
stringenteredOTP = txtcheckOTP.Text.Trim();
if(string.IsNullOrEmpty(enteredOTP))
{
MessageBox.Show("Vui lòng nhập mã OTP trước khi đăng ký.");
return;
}
if(IsEmailOrPhoneExists(emailOrPhoneNumber))
{
MessageBox.Show("Email hoặc số điện thoại đã tồn tại!"); }
else
{
Trang 10name = nameid,
Email = emailOrPhoneNumber,
PasswordHash = password,
};
users.Add(newUser);
MessageBox.Show("Đăng ký thành công!");
DanhsachTaiKhoan.Items.Add($"Tên người dùng:{nameid}||| Tên tài khoản:
{emailOrPhoneNumber}");
txtname.Clear();
txtpassword.Clear();
txtrepassword.Clear();
txtemailhaysdt.Clear();
txtcheckOTP.Clear();
otpEntered =false;
}
}
}
public classUser
{
public stringname {get set; ; }
public stringEmail {get set; ; }
public stringNumBerPhone {get set; ; }
public stringPasswordHash {get set; ; }
}
private voidtxtpassword_TextChanged(objectsender, EventArgs e)
{
txtpassword.PasswordChar = ;'*'
}
private voidtxtrepassword_TextChanged(objectsender, EventArgs e)
{
txtrepassword.PasswordChar = ;'*'
}
private voidbtnGuiOTP_Click(objectsender, EventArgs e)
{
try
{
otp = random.Next(100000, 100000000);
varfromAddress =newMailAddress("hai099089@gmail.com");
vartoAddress =newMailAddress(txtemailhaysdt.ToString());
const stringfrompass ="bvrd eiqw khei kzpw";
const stringsubject ="OTP Code";
stringbody = otp.ToString();
varsmtp =newSmtpClient
{
Host ="smtp.gmail.com",
Trang 11DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials =false,
Credentials =newNetworkCredential(fromAddress.Address, frompass),
Timeout = 200000
};
using(varmessage =newMailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}
// Chỉ đặt otpEntered thành true sau khi gửi thành công
MessageBox.Show("OTP đã được gửi qua mail!");
otpEntered =true;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
stringaccountSid ="ACd9d358c3ece319c6ff95d71001ae02bf";
stringauthToken ="447b8e56607d05aa734376452a553127";
TwilioClient.Init(accountSid, authToken);
stringotpCode = otp.ToString();// Mã OTP đã tạo
try
{
varmessageOptions =newCreateMessageOptions(
newPhoneNumber("+84337883917"));
messageOptions.From =newPhoneNumber("+15168644357");
messageOptions.MessagingServiceSid ="MGcef5150a17a24a6a3e889ab297819b7c"; messageOptions.Body = otp.ToString();
phoneOTP = otp.ToString();
varmessage = MessageResource.Create(messageOptions);
Console.WriteLine(message.Body);
MessageBox.Show("OTP gửi thành công!","Success", MessageBoxButtons.OK);
otpEntered =true;
}
catch(Exception ex)
{
MessageBox.Show($"Failed to send OTP Error:{ex.Message}","Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Trang 12if(otpEntered)
{
stringenteredOTP = txtcheckOTP.Text.Trim();
if(!string.IsNullOrEmpty(enteredOTP))
{
Console.WriteLine($"phoneOTP:{phoneOTP} );"
Console.WriteLine($"enteredOTP:{enteredOTP} );"
if(phoneOTP.Equals(enteredOTP))// So sánh với mã OTP của số điện thoại
{
MessageBox.Show("Xác minh thành công OTP");
}
else
{
MessageBox.Show("OTP Không chính xác");
}
}
else
{
MessageBox.Show("Vui lòng nhập mã OTP trước khi xác minh."); }
}
else
{
MessageBox.Show("Vui lòng gửi mã OTP trước khi xác minh.");
}
}
}
}