Chào mừng bạn đến với thế giới “xác minh” – nơi mỗi cú click là một niềm vui và mỗi mã OTP là một “bí kíp thần kỳ”! Chắc hẳn bạn đang tìm cách triển khai tính năng OTP xác minh tài khoản sao cho dễ dùng mà vẫn bảo mật. Hãy cùng nhau “hack” chút niềm vui vào tính năng này nhé!
1. Tạo Shortcode OTP Verification Form (Mẫu Xác Minh OTP)
Shortcode này sẽ giúp bạn tạo ra một mẫu xác minh OTP để khách hàng có thể nhập mã vào, với giao diện dễ thương và thân thiện như những món quà bất ngờ. Chỉ cần thả shortcode này vào bất cứ nơi nào bạn muốn hiển thị mẫu OTP, và khách hàng sẽ cảm thấy mình đang bước vào một trò chơi thú vị hơn là một thủ tục xác minh khô khan.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
add_shortcode('otp_verification_form', 'otp_verification_form_shortcode'); function otp_verification_form_shortcode() { ob_start(); ?> <style> #otp-verification-container { max-width: 400px; margin: 0 auto; padding: 20px; border: 1px solid #ddd; border-radius: 8px; background-color: #f9f9f9; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } #otp-form { display: none; margin-top: 15px; } #otp-form label { display: block; margin-bottom: 8px; font-weight: bold; } #otp-form input[type="text"] { width: calc(100% - 20px); padding: 10px; margin-bottom: 10px; border: 1px solid #ddd; border-radius: 4px; } #otp-form input[type="submit"] { background-color: #3085d6; color: #fff; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; font-size: 16px; } #otp-form input[type="submit"]:hover { background-color: #2874a6; } #send-otp-btn, #resend-otp-btn { background-color: #3085d6; color: #fff; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; font-size: 16px; } #send-otp-btn:hover, #resend-otp-btn:hover { background-color: #2874a6; } #countdown { margin-top: 15px; font-size: 16px; color: #ff0000; } </style> <div id="otp-verification-container"> <form id="otp-form" method="post" style="display: none;"> <input type="hidden" name="user_id" id="user_id" value="<?php echo esc_attr($_GET['user_id']); ?>"> <label for="otp"><?php _e('Nhập mã OTP của bạn'); ?></label> <input type="text" id="otp" name="otp" required> <input type="submit" name="submit_otp" value="<?php _e('Xác minh'); ?>"> </form> <button id="send-otp-btn"><?php _e('Gửi mã OTP'); ?></button> <button id="resend-otp-btn" style="display: none;"><?php _e('Gửi lại mã OTP'); ?></button> <div id="countdown" style="display: none;"></div> </div> <?php return ob_get_clean(); } |
2. Kịch Bản JavaScript – Đếm Ngược và Gửi Mã OTP
Cái này là phần “ma thuật” sẽ khiến trải nghiệm xác minh OTP trở nên thú vị. Bằng cách thêm một bộ đếm ngược, chúng ta tạo cảm giác hồi hộp, giống như đang chờ một tin nhắn bí mật! Hãy chắc chắn bạn đã thêm JavaScript để kích hoạt nút gửi mã OTP và nút gửi lại OTP.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
add_action('wp_footer', 'otp_verification_scripts'); function otp_verification_scripts() { if (is_page('verify-account')) { // Chỉ áp dụng cho trang xác minh ?> <script> document.addEventListener('DOMContentLoaded', function () { const sendOtpBtn = document.getElementById('send-otp-btn'); const resendOtpBtn = document.getElementById('resend-otp-btn'); const countdownDiv = document.getElementById('countdown'); const otpForm = document.getElementById('otp-form'); const userId = document.getElementById('user_id').value; function sendOtp() { countdownDiv.style.display = 'block'; let countdown = 60; const interval = setInterval(function () { countdownDiv.textContent = `Vui lòng chờ để chúng tôi gửi mã OTP trong ${countdown} giây!`; countdown--; if (countdown < 0) { clearInterval(interval); countdownDiv.textContent = 'Gửi mã OTP rồi đó, kiểm tra email nha!'; fetch('<?php echo admin_url('admin-ajax.php'); ?>', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ action: 'send_otp_via_ajax', user_id: userId }) }).then(response => response.text()).then(result => { countdownDiv.textContent = 'Mã OTP đã được gửi đến email của bạn.'; otpForm.style.display = 'block'; sendOtpBtn.style.display = 'none'; resendOtpBtn.style.display = 'block'; localStorage.setItem('last_otp_time', new Date().getTime()); }).catch(error => { countdownDiv.textContent = 'Đã xảy ra lỗi. Vui lòng thử lại.'; }); } }, 1000); } sendOtpBtn.addEventListener('click', sendOtp); resendOtpBtn.addEventListener('click', function () { const lastOtpTime = localStorage.getItem('last_otp_time'); if (lastOtpTime && (new Date().getTime() - lastOtpTime < 60000)) { alert('Vui lòng chờ ít nhất 1 phút trước khi gửi lại mã OTP.'); return; } sendOtp(); }); const lastOtpTime = localStorage.getItem('last_otp_time'); if (lastOtpTime && (new Date().getTime() - lastOtpTime < 60000)) { resendOtpBtn.style.display = 'block'; } }); </script> <?php } } |
3. Gửi Mã OTP Qua AJAX
Đây là phần mà mọi người thích, khi bạn nhấn vào nút gửi mã OTP, hệ thống sẽ tạo một mã OTP “siêu bí mật” với 10 số, 1 chữ cái và 1 ký tự đặc biệt. Mã OTP này sẽ được gửi qua email của bạn – giống như một sứ mệnh đặc biệt chỉ dành riêng cho bạn vậy!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
add_action('wp_ajax_send_otp_via_ajax', 'send_otp_via_ajax'); add_action('wp_ajax_nopriv_send_otp_via_ajax', 'send_otp_via_ajax'); function send_otp_via_ajax() { $user_id = intval($_POST['user_id']); $numbers = '0123456789'; $letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $special_chars = '!@#$%^&*()_+[]{}|;:,.<>?'; $otp = ''; $otp .= substr(str_shuffle($numbers), 0, 10); // 10 số $otp .= substr(str_shuffle($letters), 0, 1); // 1 chữ cái $otp .= substr(str_shuffle($special_chars), 0, 1); // 1 ký tự đặc biệt $otp = str_shuffle($otp); update_user_meta($user_id, 'account_otp', $otp); update_user_meta($user_id, 'otp_sent_time', time()); $user = get_userdata($user_id); $subject = "Mã OTP của bạn"; $message = "Mã OTP của bạn là: $otp"; wp_mail($user->user_email, $subject, $message); wp_die(); } |
4. Xác Minh Mã OTP – Vòng Cuối Cùng Để Chiến Thắng
Phần này là “vòng chung kết” trong cuộc hành trình xác minh OTP. Lúc này, khách hàng của bạn đã nhận mã OTP, và chỉ cần nhập đúng mã để hoàn tất xác minh. Phần này kiểm tra xem mã OTP người dùng nhập có khớp với mã đã gửi qua email không. Nếu đúng và còn trong thời hạn, ta sẽ mở khóa, trao huy chương “Tài khoản đã xác minh” cho họ!
Nếu mã không đúng, hoặc thời gian đã hết hạn, khách hàng sẽ được đưa ra ngoài để thử lại hoặc chờ thêm chút thời gian trước khi gửi lại mã.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
add_action('init', 'verify_otp_account'); function verify_otp_account() { if (isset($_POST['submit_otp'])) { $user_id = intval($_POST['user_id']); $otp = sanitize_text_field($_POST['otp']); $saved_otp = get_user_meta($user_id, 'account_otp', true); $otp_sent_time = get_user_meta($user_id, 'otp_sent_time', true); if ($saved_otp && $saved_otp === $otp) { // Kiểm tra thời gian hết hạn OTP (ví dụ: 10 phút) if (time() - $otp_sent_time > 600) { wp_redirect(home_url('/xac-minh-that-bai')); // Hết thời hạn mã OTP exit; } update_user_meta($user_id, 'account_verified', true); // Cập nhật trạng thái xác minh delete_user_meta($user_id, 'account_otp'); // Xóa mã OTP đã dùng delete_user_meta($user_id, 'otp_sent_time'); // Xóa thời gian gửi mã wp_redirect(home_url('/xac-minh-thanh-cong')); // Chuyển đến trang thành công exit; } else { wp_redirect(home_url('/xac-minh-that-bai')); // Mã OTP không chính xác exit; } } } |
Giải thích chi tiết:
- Lấy mã OTP và thời gian gửi từ cơ sở dữ liệu.
- So sánh mã OTP đã nhập với mã đã gửi:
- Nếu khớp và thời gian chưa hết hạn (10 phút ở đây), thì xác minh thành công.
- Nếu mã sai hoặc hết thời gian, chuyển hướng đến trang xác minh thất bại.
- Cập nhật trạng thái xác minh: Nếu xác minh thành công, trạng thái tài khoản sẽ được đánh dấu là “Đã xác minh”, và mã OTP cũng như thời gian gửi sẽ bị xóa để giữ cho tài khoản gọn gàng và bảo mật.
Với quy trình này, bạn đã hoàn thành việc thiết lập một hệ thống xác minh OTP thân thiện, bảo mật và dễ dùng.
Dưới đây là mã hoàn chỉnh, chỉ cần bỏ vào funtion là được nè, chức mấy iu của chế thành công nhé. Thấy hay hãy cho xin 5 sao ủng hộ tui nhé bà con ơi. Đăng ký tài khoản để xem code hoàn chỉnh nhé bà con
- Cách Sử Dụng Các Mạng Xã Hội Để Tăng Traffic Cho Website
- Năm 2024 Chi phí thiết kế website bao nhiêu tiền?
- Quản Lý Thuộc Tính DoFollow và NoFollow cho Các Liên Kết trong Nội Dung và Bình Luận
- Cách Sử Dụng SEO Local Để Tăng Khách Hàng Địa Phương
- Top 10 Theme WordPress Bán Hàng Miễn Phí Chuẩn SEO Mới Nhất 2024