Trong mọi hệ thống web hiện đại, việc đăng ký tài khoản và xác thực qua email là bước quan trọng để bảo mật và tạo sự tin tưởng với người dùng. Khi một người dùng mới đăng ký, hệ thống cần gửi email chứa đường link xác nhận để đảm bảo rằng địa chỉ email này thực sự thuộc về họ. Chỉ sau khi xác nhận thành công, tài khoản mới được kích hoạt và có thể sử dụng.
Tại sao đây là bước cần thiết? Bởi nếu bỏ qua xác minh email, bạn có thể gặp tình trạng: người dùng dùng email giả mạo, bot tự động tạo tài khoản ảo, hoặc spam đăng ký để phá hoại hệ thống. Do đó, xác nhận tài khoản qua email vừa tăng cường bảo mật, vừa nâng cao trải nghiệm người dùng.
Để triển khai trọn vẹn chức năng này, bạn cần kết hợp nhiều kiến thức đã học từ các bài viết trước:
-
Kết nối MySQL bằng PDO trong PHP để thao tác cơ sở dữ liệu.
-
Hash mật khẩu bằng password_hash và xác minh bằng password_verify để bảo mật mật khẩu.
-
Giữ đăng nhập bằng Session trong PHP để quản lý phiên đăng nhập.
-
Gửi email bằng PHPMailer trong PHP để gửi link xác nhận.
Trong bài viết này, mình sẽ hướng dẫn chi tiết toàn bộ quy trình xử lý đăng ký và xác thực tài khoản bằng email với PHP + MySQL, bao gồm: tạo form đăng ký, lưu dữ liệu, sinh token xác nhận, gửi email bằng PHPMailer, xử lý link xác nhận, và kích hoạt tài khoản.
Kiến trúc hệ thống đăng ký và xác thực
Trước khi đi vào code, hãy hình dung kiến trúc tổng thể:
- Người dùng đăng ký → nhập username, email, mật khẩu.
- Hệ thống lưu thông tin vào DB với trạng thái
inactivevà sinh một token ngẫu nhiên. - PHPMailer gửi email chứa đường link xác nhận (kèm token).
- Người dùng click link → hệ thống kiểm tra token.
- Nếu hợp lệ → cập nhật trạng thái user thành
active, tài khoản sẵn sàng sử dụng.
Với luồng này, bạn vừa đảm bảo chỉ những email thật mới được kích hoạt, vừa chống spam hiệu quả.
Tạo bảng users với trường status và verify_token
Đầu tiên, bạn cần một bảng trong MySQL để lưu thông tin user. Ngoài các trường cơ bản như id, username, email, password, chúng ta cần thêm:
-
status: để lưu trạng thái tài khoản (inactivehoặcactive). -
verify_token: để lưu chuỗi token gửi kèm email xác nhận.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
status ENUM('inactive', 'active') DEFAULT 'inactive',
verify_token VARCHAR(64) DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Cấu trúc này đơn giản nhưng đủ để thực hiện xác nhận email. Khi đăng ký, status mặc định là inactive và verify_token sẽ chứa chuỗi ngẫu nhiên.
Tạo form đăng ký người dùng
Tiếp theo, ta cần một form HTML để người dùng nhập thông tin. Form này nên bao gồm các trường: username, email, password, confirm password. Ngoài ra, bạn có thể thêm validate cơ bản ở frontend bằng JavaScript, nhưng phần quan trọng nhất vẫn là validate server-side trong PHP.

