Trong thế giới kỹ thuật 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 của nó.
Xác thực dựa trên email là một trong những phương pháp phổ biến và được sử dụng rộng rãi nhất để đăng ký và đăng nhập người dùng. Nhưng nó không phải lúc nào cũng đáng tin cậy vì người dùng có thể nhập địa chỉ email giả hoặc không hợp lệ trong quá trình đăng ký. Điều này có thể 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ẽ sử dụng Dịch vụ xác thực email để giúp bạn tự động hóa quy trình xác thực email của mình trong quá trình đăng ký người dùng bằng cách xác thực thông tin liên hệ.
API kiểm tra cú pháp, tên miền và hộp thư của địa chỉ email, thậm chí có thể phát hiện các email dùng một lần và có rủi ro.
Bằng cách tích hợp API này với ứng dụng của bạn, bạn có thể đảm bảo rằng chỉ những địa chỉ email chính hãng và hợp lệ mới được sử dụng để đăng ký người dùng, điều này sẽ tăng cường tính bảo mật cho ứng dụng của bạn.
Điều kiện tiên quyết
Trước khi bắt đầu hướng dẫn, hãy đảm bảo bạn đáp ứng các yêu cầu sau:
- Kiến thức làm việc về Python
- Đã cài đặt Python 3.8+ trên hệ thống của bạn
- Kiến thức cơ bản về Flask, Bản thiết kế Flask và Yêu cầu.
Cách thiết lập môi trường ảo
Trước khi bắt đầu viết mã, bạn cần đảm bảo đã cài đặt tất cả các công cụ và thư viện cần thiết. Để đảm bảo rằng bạn có một môi trường sạch sẽ và biệt lập, bạn sẽ tạo một môi trường ảo bằng cách sử dụng venv .
Tạo một thư mục dự án và điều hướng đến nó trong terminal:
mkdir email-validation
cd email-validation
Tạo môi trường ảo có tên env sử dụng lệnh sau:
python -m venv env
Python hiện có sẵn venv được cài đặt sẵn thư viện để tạo môi trường ảo.
Kích hoạt môi trường ảo như thế này:
source env/bin/activate
Lưu ý:Nếu bạn đang dùng Windows, bạn sẽ cần sử dụng source env/Scripts/activate để kích hoạt môi trường.
Bạn sẽ thấy (env) trong lời nhắc thiết bị đầu cuối của bạn, cho biết rằng môi trường ảo đã được kích hoạt.
Xác thực email là một quy trình thiết yếu đối với bất kỳ ứng dụng web nào yêu cầu xác thực người dùng và có nhiều cách khác nhau để thực hiện việc đó.
Một cách là sử 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 xem chúng có đúng cú pháp hay không, miền có tồn tại hay không và hộp thư có thể nhận thư hay không.
API cung cấp nhiều gói giá phù hợp với các nhu cầu khác nhau. Gói miễn phí cho phép các nhà phát triển xác thực tối đa 100 email, đủ cho mục đích thử nghiệm của chúng tôi. Gói trả phí có giá khởi điểm là 9,99 USD mỗi tháng và cung cấp nhiều yêu cầu hơn, nhiều tính năng hơn cũng như thời gian phản hồi nhanh hơn.
Trong phần này, bạn sẽ viết hàm Python gửi yêu cầu GET đến điểm cuối của API và chuyển địa chỉ email để xác thực dưới dạng tham số.
Để xác thực yêu cầu API, bạn cũng cần chuyển khóa API cùng với yêu cầu. Trước khi tiếp tục, bạn phải tạo một tài khoản trên emailvalidation.io để lấy khóa API. Khi bạn đã tạo tài khoản của mình, bạn sẽ được chuyển hướng đến trang tổng quan, tương tự như trang được hiển thị bên dưới. Khóa API nằm ở vùng được đánh dấu màu đen.
Để thực hiện yêu cầu GET, bạn cần cài đặt requests thư viện trong môi trường ảo của bạn:
pip install requests
Tiếp theo, tạo test.py tập tin và thêm đoạn mã sau vào đó:
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"))
is_valid Hàm lấy địa chỉ email làm đối số và tạo URL có địa chỉ email để gọi API emailvalidation.io. CaseInsensitiveDict lớp từ requests.structures mô-đun được sử dụng để tạo một từ điển có các khóa không phân biệt chữ hoa chữ thường để đặt khóa API trong tiêu đề của yêu cầu. Sau đó, bạn trả về phản hồi JSON từ hàm.
Cuối cùng, bạn gọi is_valid hoạt động hai lần với các địa chỉ email khác nhau để chứng minh cách hàm có thể xác thực cả hai địa chỉ email hợp lệ (support@emailvalidation.io ) và địa chỉ email không hợp lệ (venip42579@jdsdhak.com ).
Đầu ra:
{
"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 có thể tìm hiểu về các phím khác nhau trong phản hồi tại đây. Để xác định xem địa chỉ email có hợp lệ hay không dựa trên phản hồi JSON từ emailvalidation.io, bạn nên kiểm tra các trường sau:
format_valid:Nếutrue, địa chỉ email được định dạng đúng. Nếufalse, địa chỉ email không hợp lệ.mx_found:Nếutrue, ít nhất một bản ghi MX đã được tìm thấy cho tên miền. Nếufalse, tên miền không hợp lệ.smtp_check:Nếutrue, địa chỉ email có hộp thư hợp lệ. Nếufalse, hộp thư không hợp lệ.state:Trạng thái hiện tại của địa chỉ email. Các giá trị có thể là "có thể gửi được" hoặc "không thể gửi được".
Vì vậy, bạn có thể sửa đổi is_valid hàm trả về phản hồi Boolean thay vì đối tượng JSON như 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"] = "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"))
Đầu ra:
True
False
Trong phần sắp tới, bạn sẽ sử dụng chức năng này để xác thực email trong quá trình đă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
Trong phần này, bạn sẽ thực hiện các bước để thiết lập xác thực người dùng cơ bản trong Flask. Bạn sẽ sử dụng mã từ một trong những bài viết trước của tôi, nơi tôi đã giải thích cách triển khai xác thực người dùng cơ bản.
Bạn có thể bắt đầu bằng cách kéo mã từ kho GitHub sang email-validation thư mục:
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) . sẽ không chạy trong trường hợp này vì thư mục của bạn không trống.
Tiếp theo, bạn sẽ thấy requirements.txt tệp chứa các phần phụ thuộc để chạy ứng dụng trong hệ thống của bạn. Cài đặt các phần phụ thuộc bằng lệnh:
pip install -r requirements.txt
Sau khi cài đặt tất cả các phần phụ thuộc, bạn sẽ cần thêm các biến môi trường cần thiết cho dự án. Dự án chứa .env tập tin có tất cả các biến môi trường. Chạy lệnh sau để xuất tất cả các biến môi trường từ .env tập tin:
source .env
Tiếp theo, bạn phải tạo cơ sở dữ liệu. Vì dự án sử dụng Flask-Migrate nên việc tạo cơ sở dữ liệu là một tác vụ khá đơn giản bằng cách sử dụng các lệnh sau:
python manage.py db init
python manage.py db migrate
python manage.py db upgrade
Bây giờ, bạn có thể chạy ứng dụng bằng lệnh:
python manage.py run
Ứng dụng sẽ bắt đầu chạy và bạn có thể truy cập http://localhost:5000/login trong trình duyệt web của bạn để xem ứng dụng.
Đây là video demo giới thiệu ứng dụng:
Bên trong dự án của bạn flask-validation , bạn sẽ có src thư mục chứa mã nguồn của bạn và tests thư mục chứa các bài kiểm tra đơn vị.
Ngoài những thứ này, bạn còn có config.py tệp chứa cài đặt cấu hình cho ứng dụng của bạn và manage.py tệp sử dụng Flask-CLI để thêm các lệnh khác nhau để chạy và kiểm tra ứng dụng của bạn. Bạn cũng sẽ tìm thấy các tệp khác như .env và requirements.txt mà bạn đã biết rồi.
src thư mục chứa bốn thư mục con – accounts , core , templates , và static . templates và static các thư mục lần lượt chứa các tệp HTML và các tệp tĩnh như CSS, hình ảnh và tệp JavaScript. Hai thư mục còn lại, accounts và core , hãy sử dụng khái niệm Bản thiết kế Flask và chứa các mã tương ứng cho các phần khác nhau của ứng dụng.
Nếu bạn muốn tìm hiểu thêm về cách triển khai ứng dụng Flask của mình, bạn có thể tham khảo hướng dẫn này.
Cách tích hợp dịch vụ xác thực email trong ứng dụng Flask của bạn
Cho đến thời điểm này, bạn có thể đăng ký thành công ứng dụng bằng bất kỳ địa chỉ email nào, bất kể địa chỉ đó có hợp lệ hay không.
Nhưng bạn không nên để địa chỉ email ngẫu nhiên hoặc không chính xác làm xáo trộn cơ sở dữ liệu của mình. Vì vậy, tốt nhất bạn nên xác thực địa chỉ email trước khi đăng ký người dùng. Nếu địa chỉ email hợp lệ, bạn có thể tiến hành đăng ký người dùng thành công.
Thêm Khóa API xác thực email của bạn vào .env file để bạn có thể đọc nó mà không bị lộ ra ngoài:
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 thế your-api-key-here bằng khóa API chính xác của bạn. Tiếp theo, bạn sẽ cần chạy lại lệnh sau để xuất các biến môi trường:
source .env
Bây giờ, hãy tạo một utils.py tập tin bên trong accounts thư mục con trong src thư mục. Tệp sẽ chứa chức năng tiện ích để xác thực email. Thêm đoạn mã sau vào tệp:
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ư đã đề cập trước đó, is_valid() hàm trả về giá trị Boolean cho biết địa chỉ email có hợp lệ hay không. Điều quan trọng cần lưu ý là hàm này không mã hóa cứng giá trị khóa API, thay vào đó nó truy xuất giá trị đó từ các biến môi trường.
Tiếp theo, trong RegisterForm lớp trong forms.py tệp, bạn có validate phương pháp. Phương thức này có nhiệm vụ xác thực dữ liệu đầu vào do người dùng gửi trong quá trình đăng ký.
Trước đây, phương pháp này chỉ kiểm tra xem email đã được đăng ký chưa và mật khẩu có khớp hay không. Nhưng bây giờ bạn có thể thêm xác thực bổ sung để kiểm tra xem email có hợp lệ hay không. Do đó, validate đã được sửa đổi phương pháp trông như thế này:
...
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 validate phương thức, nếu self.email.data (tức là địa chỉ email của người dùng) không hợp lệ, bạn thêm thông báo lỗi vào self.email.errors liệt kê và trả về False điều đó có nghĩa là dữ liệu người dùng không hợp lệ.
Bây giờ, khi bạn chạy ứng dụng và thử đăng ký, bạn có thể thấy nó trực tiếp. Đây là bản demo hiển thị 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 việc xác thực email của người dùng trong quá trình đăng ký, còn có một số trường hợp sử dụng khác đối với Dịch vụ xác thực email. Một số trong số này là:
- Dọn dẹp danh sách email:bạn có thể sử dụng dịch vụ xác thực email để xóa danh sách email bằng cách xóa các địa chỉ email không hợp lệ, không tồn tại hoặc có rủi ro. Điều này có thể giúp cải thiện khả năng gửi email và đảm bảo email của bạn đến được với người nhận mong muốn.
- Ngăn chặn các hoạt động gian lận:bạn cũng có thể sử dụng dịch vụ xác thực email để phát hiện các hoạt động gian lận như tạo tài khoản giả hoặc đặt hàng gian lận. Bằng cách xác thực các địa chỉ email liên quan đến các hoạt động này, bạn có thể ngăn những hoạt động đó xảy ra.
- Nâng cao các chiến dịch tiếp thị:những dịch vụ này cũng có thể giúp cải thiện tính chính xác và hiệu quả của các chiến dịch tiếp thị qua email. Bằng cách đảm bảo rằng địa chỉ email hợp lệ và đang hoạt động, doanh nghiệp có thể tăng tỷ lệ gửi email và cải thiện hiệu suất chiến dịch tổng thể của mình.
Nhìn chung, dịch vụ xác thực email có thể là một công cụ mạnh mẽ trong việc đảm bảo tính chính xác và hợp lệ của dữ liệu người dùng, 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à một công cụ mạnh mẽ cho bất kỳ ứng dụng nào yêu cầu xác minh địa chỉ email của người dùng. Điều cần thiết là phải đảm bảo rằng địa chỉ email hợp lệ để tránh lỗi và đảm bảo rằng dữ liệu đầu vào của người dùng là chính xác.
Trong bài viết này, bạn đã biết cách sử dụng API emailvalidation.io để xác thực địa chỉ email trong Python. Bạn cũng đã tìm hiểu các trường hợp sử dụng tiềm năng khác đối với dịch vụ xác thực email, chẳng hạn như phát hiện gian lận và tiếp thị qua email.
Bằng cách triển khai dịch vụ xác thực email trong ứng dụng của mình, bạn có thể cải thiện trải nghiệm người dùng và đảm bảo rằng dữ liệu của bạn chính xác và cập nhật.
Tài nguyên bổ sung
- Cách sử dụng bản thiết kế để sắp xếp các ứng dụng Flask của bạn
- Cách thiết lập xác minh email trong ứng dụng Flask
- Tài liệu emailvalidation.io
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu