Trong thế giới số ngày nay, bảo mật trực tuyến thực sự quan trọng, và xác thực người dùng là khía cạnh then chốt.
Xác thực dựa trên email là một trong phương pháp phổ biến và rộng rãi dùng cho đăng ký và đăng nhập người dùng. Nhưng không phải lúc nào cũng tin cậy, vì người dùng có thể nhập email giả hoặc không hợp lệ khi đăng ký. Điều này dẫn đến rủi ro bảo mật và gian lận. Đây là lúc Dịch Vụ Xác Thực Email phát huy tác dụng.
Trong hướng dẫn này, bạn sẽ dùng Dịch Vụ Xác Thực Email để tự động hóa quy trình xác thực email khi đăng ký bằng cách xác thực thông tin liên lạc.
API kiểm tra cú pháp, domain, và mailbox của địa chỉ email, thậm chí phát hiện email dùng một lần (disposable) và email rủi ro.
Bằng cách tích hợp API này với ứng dụng, bạn đảm bảo chỉ email hợp lệ và thật được dùng để đăng ký, nâng cao bảo mật ứng dụng.
Điều Kiện Tiên Quyết
Trước khi bắt đầu hướng dẫn, đảm bảo bạn đáp ứng yêu cầu sau:
- Kiến thức làm việc với Python
- Python 3.8+ cài đặt trên hệ thống
- Kiến thức cơ bản Flask, Flask Blueprints và Requests.
Cách Thiết Lập Môi Trường Ảo
Trước khi code, đảm bảo bạn có công cụ và thư viện cần thiết. Để có môi trường sạch và cô lập, tạo môi trường ảo dùng venv.
Tạo thư mục dự án và điều hướng vào terminal:
mkdir email-validation
cd email-validation
Tạo môi trường ảo tên env:
python -m venv env
Python hiện có sẵn thư viện venv tạo môi trường ảo.
Kích hoạt môi trường ảo:
source env/bin/activate
Lưu ý: Nếu bạn dùng Windows, dùng source env/Scripts/activate.
Bạn thấy (env) trong prompt terminal, cho biết môi trường ảo đã kích hoạt.
Xác thực email là quy trình thiết yếu cho ứng dụng web yêu cầu xác thực người dùng, có nhiều cách thực hiện.
Một cách dùng dịch vụ xác thực email như emailvalidation.io. API này cho phép nhà phát triển xác thực địa chỉ email bằng cách kiểm tra đúng cú pháp, domain tồn tại, và mailbox có nhận tin nhắn được.
API cung cấp các gói giá phù hợp nhu cầu khác nhau. Gói miễn phí cho phép xác thực tới 100 email, đủ cho mục đích test. Gói trả tiền từ $9.99/tháng cung cấp nhiều request, tính năng, và phản hồi nhanh hơn.
Phần này, bạn viết hàm Python gửi GET request đến endpoint API và truyền email cần xác thực làm tham số.
Để xác thực request API, cũng cần truyền API key cùng request. Trước khi tiến hành, phải tạo tài khoản emailvalidation.io lấy API key. Sau khi tạo tài khoản, bạn chuyển đến dashboard tương tự bên dưới. API key nằm vùng đen highlight.
Để làm GET request, cài thư viện requests trong môi trường ảo:
pip install requests
Tạo file test.py thêm mã sau:
import requests
from requests.structures import CaseInsensitiveDict
def is_valid(email: str):
url = f"https://api.emailvalidation.io/v1/info?email={email}"
headers = CaseInsensitiveDict()
headers["apikey"] = "your-api-key-here"
response = requests.get(url, headers=headers)
return response.json()
print(is_valid("support@emailvalidation.io"))
print(is_valid("venip42579@jdsdhak.com"))
Hàm is_valid nhận địa chỉ email làm tham số và xây dựng URL với email để gọi API emailvalidation.io. Lớp CaseInsensitiveDict từ module requests.structures tạo dictionary key không phân biệt hoa thường để đặt API key trong header request. Bạn trả về JSON response từ hàm.
Cuối cùng, gọi is_valid hai lần với email khác nhau demo hàm xác thực cả email hợp lệ (support@emailvalidation.io) và không hợp lệ (venip42579@jdsdhak.com).
Output:
{
"email":"support@emailvalidation.io",
"user":"support",
"tag":"",
"domain":"emailvalidation.io",
"smtp_check":true,
"mx_found":true,
"did_you_mean":"",
"role":true,
"disposable":false,
"score":0.64,
"state":"deliverable",
"reason":"valid_mailbox",
"free":false,
"format_valid":true,
"catch_all":"None"
}
{
"email":"venip42579@jdsdhak.com",
"user":"venip42579",
"tag":"",
"domain":"jdsdhak.com",
"smtp_check":false,
"mx_found":false,
"did_you_mean":"",
"role":false,
"disposable":false,
"score":0.64,
"state":"undeliverable",
"reason":"invalid_mx",
"free":false,
"format_valid":true,
"catch_all":"None"
}
Bạn tìm hiểu các key trong response tại đây. Để xác định email hợp lệ dựa trên JSON response từ emailvalidation.io, kiểm tra các trường sau:
format_valid: Nếutrue, email đúng định dạng. Nếufalse, email không hợp lệ.mx_found: Nếutrue, tìm thấy ít nhất một bản ghi MX cho domain. Nếufalse, domain không hợp lệ.smtp_check: Nếutrue, email có mailbox hợp lệ. Nếufalse, mailbox không hợp lệ.state: Trạng thái hiện tại email. Giá trị "deliverable" hoặc "undeliverable".
Vậy bạn sửa hàm is_valid trả về Boolean thay vì JSON object như dưới:
import requests
from requests.structures import CaseInsensitiveDict
def is_valid(email: str):
url = f"https://api.emailvalidation.io/v1/info?email={email}"
headers = CaseInsensitiveDict()
headers["apikey"] = "nUH1hmV24lEwX1TIXmsgRPRRZw0L0NuOeHrdMp78"
response = requests.get(url, headers=headers)
if response.status_code == 200:
json_resp = response.json()
format_valid = json_resp["format_valid"]
mx_found = json_resp["mx_found"]
smtp_check = json_resp["smtp_check"]
state = json_resp["state"]
return format_valid and mx_found and smtp_check and state == "deliverable"
return False
print(is_valid("support@emailvalidation.io"))
print(is_valid("venip42579@jdsdhak.com"))
Output:
True
False
Phần tới, bạn dùng hàm này xác thực email khi đăng ký người dùng.
Cách Thiết Lập Xác Thực Người Dùng Cơ Bản Trong Flask
Phần này, bạn qua các bước thiết lập xác thực cơ bản Flask. Bạn dùng code từ bài trước nơi tôi giải thích cách triển khai xác thực cơ bản.
Bắt đầu kéo code từ GitHub repo vào thư mục email-validation:
git init
git remote add origin https://github.com/ashutoshkrris/Flask-User-Authentication.git
git pull origin main
Lưu ý: Lệnh git clone [https://github.com/ashutoshkrris/Flask-User-Authentication.git](https://github.com/ashutoshkrris/Flask-User-Authentication.git) . không chạy vì thư mục không rỗng.
Tiếp, bạn thấy file requirements.txt chứa dependencies chạy ứng dụng. Cài dependencies:
pip install -r requirements.txt
Sau khi cài xong dependencies, thêm biến môi trường cần thiết. Dự án có file .env chứa biến môi trường. Chạy lệnh sau export biến từ .env:
source .env
Tiếp, tạo database. Vì dự án dùng Flask-Migrate, tạo database đơn giản:
python manage.py db init
python manage.py db migrate
python manage.py db upgrade
Bây giờ chạy ứng dụng:
python manage.py run
Ứng dụng chạy và bạn vào https://localhost:5000/login trình duyệt xem ứng dụng.
Đây là video demo ứng dụng:
Bên trong thư mục dự án flask-validation, bạn có thư mục src chứa source code và tests chứa unit test.
Ngoài ra, có file config.py chứa cài đặt cấu hình ứng dụng và manage.py dùng Flask-CLI thêm lệnh chạy/test ứng dụng. Cũng tìm thấy .env và requirements.txt bạn đã biết.
Thư mục src chứa 4 thư mục con – accounts, core, templates, static. templates và static chứa file HTML và file tĩnh (CSS, hình ảnh, JS). Hai thư mục còn lại, accounts và core, dùng khái niệm Flask Blueprints chứa code cho các phần khác nhau của ứng dụng.
Nếu muốn tìm hiểu triển khai ứng dụng Flask, tham khảo hướng dẫn này.
Cách Tích Hợp Dịch Vụ Xác Thực Email Vào App Flask
Cho đến nay, có thể đăng ký thành công dùng bất kỳ email nào, dù hợp lệ hay không.
Nhưng không mong muốn email ngẫu nhiên hoặc sai làm rối database. Vậy nên xác thực email trước khi đăng ký user. Nếu email hợp lệ, tiến hành đăng ký thành công.
Thêm API Key Xác Thực Email vào file .env để đọc mà không lộ công khai:
export SECRET_KEY=fdkjshfhjsdfdskfdsfdcbsjdkfdsdf
export DEBUG=True
export APP_SETTINGS=config.DevelopmentConfig
export DATABASE_URL=sqlite:///db.sqlite
export FLASK_APP=src
export FLASK_DEBUG=1
export API_KEY=your-api-key-here
Thay your-api-key-here bằng API key đúng. Tiếp, chạy lại lệnh export biến môi trường:
source .env
Tạo file utils.py trong thư mục con accounts trong src. File chứa hàm tiện ích xác thực email. Thêm mã sau:
import requests
from requests.structures import CaseInsensitiveDict
from decouple import config
def is_valid(email: str):
url = f"https://api.emailvalidation.io/v1/info?email={email}"
headers = CaseInsensitiveDict()
headers["apikey"] = config("API_KEY")
response = requests.get(url, headers=headers)
if response.status_code == 200:
json_resp = response.json()
format_valid = json_resp["format_valid"]
mx_found = json_resp["mx_found"]
smtp_check = json_resp["smtp_check"]
state = json_resp["state"]
return format_valid and mx_found and smtp_check and state == "deliverable"
return False
Như đã nói, hàm is_valid() trả về Boolean cho biết email hợp lệ hay không. Quan trọng hàm không hardcode API key, mà lấy từ biến môi trường.
Tiếp, trong class RegisterForm file forms.py, có phương thức validate. Phương thức này xác thực dữ liệu đầu vào user gửi khi đăng ký.
Trước đây, phương thức chỉ kiểm tra email đã đăng ký chưa và mật khẩu khớp. Nhưng giờ thêm xác thực kiểm tra email hợp lệ. Vậy phương thức validate sửa đổi như sau:
...
from src.accounts.utils import is_valid
...
class RegisterForm(FlaskForm):
...
def validate(self):
initial_validation = super(RegisterForm, self).validate()
if not initial_validation:
return False
if not is_valid(self.email.data):
self.email.errors.append("Email is invalid")
return False
user = User.query.filter_by(email=self.email.data).first()
if user:
self.email.errors.append("Email already registered")
return False
if self.password.data != self.confirm.data:
self.password.errors.append("Passwords must match")
return False
return True
Trong phương thức validate, nếu self.email.data (email user) không hợp lệ, thêm thông báo lỗi vào self.email.errors và trả False nghĩa là dữ liệu user không hợp lệ.
Bây giờ, chạy ứng dụng và thử đăng ký, bạn thấy trực tiếp. Đây là demo cả trường hợp hợp lệ và không hợp lệ.
Các Trường Hợp Sử Dụng Khác Của Dịch Vụ Xác Thực Email
Ngoài xác thực email user khi đăng ký, có vài trường hợp dùng Dịch Vụ Xác Thực Email khác:
- Làm Sạch Danh Sách Email: dùng dịch vụ xác thực làm sạch danh sách email bằng cách loại bỏ email không hợp lệ, không tồn tại hoặc rủi ro. Giúp cải thiện khả năng gửi email và đảm bảo email đến người nhận đúng.
- Ngăn Chặn Hoạt Động Gian Lận: dùng dịch vụ phát hiện hoạt động gian lận như tạo tài khoản giả hoặc đơn hàng gian lận. Bằng cách xác thực email liên quan, ngăn chặn hoạt động đó.
- Nâng Cao Chiến Dịch Marketing: dịch vụ cũng giúp cải thiện độ chính xác và hiệu quả chiến dịch email marketing. Bằng cách đảm bảo email hợp lệ và hoạt động, doanh nghiệp tăng tỷ lệ gửi thành công và cải thiện hiệu suất chiến dịch.
Tóm lại, dịch vụ xác thực email là công cụ mạnh đảm bảo độ chính xác và tính hợp lệ dữ liệu user, ngăn chặn gian lận, và cải thiện trải nghiệm người dùng.
Kết Luận
Dịch vụ xác thực email là công cụ mạnh cho ứng dụng yêu cầu xác thực địa chỉ email user. Cần thiết đảm bảo email hợp lệ để ngăn chặn lỗi và đảm bảo dữ liệu đầu vào user đúng đắn.
Bài này bạn thấy cách dùng API emailvalidation.io xác thực email trong Python. Bạn cũng học các trường hợp dùng khác như phát hiện gian lận và email marketing.
Bằng cách triển khai dịch vụ xác thực email trong ứng dụng, bạn cải thiện trải nghiệm user và đảm bảo dữ liệu chính xác, cập nhật.
Tài Nguyên Bổ Sung
- Cách Dùng Blueprints Tổ Chức Flask Apps
- Cách Thiết Lập Xác Thực Email Trong Flask App
- Tài Liệu emailvalidation.io
Học lập trình miễn phí. Chương trình mở của freeCodeCamp đã giúp hơn 40.000 người tìm được việc làm lập trình viên. Bắt đầu ngay