Khắc phục lỗi Google Site Kit: Loại bỏ Domain Email khi đăng ký trong WordPress

Khi sử dụng Google Site Kit hoặc các plugin đăng nhập SSO (Single Sign-On) tương tự, WordPress thường tạo username dựa trên địa chỉ email. Điều này khiến username bị hiển thị như johnsmithgmailcom – vừa xấu, vừa dễ lộ thông tin người dùng. Bài viết này hướng dẫn bạn cách kỹ thuật để loại bỏ hoàn toàn phần domain email (ví dụ: @gmail.com), chỉ giữ lại phần trước dấu @ làm username ngay tại thời điểm đăng ký.

Khắc phục lỗi Google Site Kit: Loại bỏ Domain Email khi đăng ký trong WordPress

Vì sao lại xảy ra lỗi này?

Google Site Kit sử dụng cơ chế đăng nhập OAuth của Google, và trong quá trình xác thực, nó cung cấp địa chỉ email làm định danh duy nhất. WordPress sau đó xử lý chuỗi này bằng hàm sanitize_user(), tự động loại bỏ các ký tự không hợp lệ như @.. Kết quả là, [email protected] trở thành johnsmithgmailcom.

Hậu quả là:

  • Username trông như một email bị hỏng, ảnh hưởng đến giao diện và tính chuyên nghiệp.
  • Nếu có hai người dùng với local-part trùng nhau (ví dụ: [email protected][email protected]), dễ gây trùng lặp và khó quản lý.

Giải pháp kỹ thuật

WordPress có sẵn hook pre_user_login cho phép can thiệp ngay trước khi tài khoản được tạo. Bằng cách gắn filter này, ta có thể bắt username, cắt bỏ phần domain, chuẩn hóa lại, và đảm bảo nó là duy nhất trước khi ghi vào cơ sở dữ liệu.

Đoạn mã hoàn chỉnh

<?php
// Cắt bỏ domain email, chỉ giữ lại local-part làm username khi đăng ký
add_filter('pre_user_login', function ($user_login) {
    // Nếu username trông như email thì cắt phần sau dấu @
    if (strpos($user_login, '@') !== false) {
        $user_login = substr($user_login, 0, strpos($user_login, '@'));
    }

    // Chuẩn hóa username (chuyển về lowercase, bỏ ký tự lạ)
    $user_login = sanitize_user($user_login, true);

    // Nếu rỗng thì đặt mặc định là "user"
    if ($user_login === '') {
        $user_login = 'user';
    }

    // Nếu chưa tồn tại, trả về ngay (không thêm hậu tố)
    if (!username_exists($user_login)) {
        return $user_login;
    }

    // Nếu trùng, thêm hậu tố -1, -2,...
    $base = $user_login;
    $i = 1;
    $candidate = "{$base}-{$i}";
    while (username_exists($candidate)) {
        $i++;
        $candidate = "{$base}-{$i}";
    }
    return $candidate;
}, 10, 1);

Cách triển khai

  1. Tạo MU-Plugin (khuyến nghị):
    Tạo file fix-google-sitekit-username.php trong thư mục wp-content/mu-plugins và dán đoạn mã trên vào. MU-plugin tự động kích hoạt và không bị ghi đè khi cập nhật theme hoặc plugin.
  2. Sử dụng plugin Code Snippets:
    Tạo một snippet mới, đặt tên “Cắt domain email khỏi username”, chọn “Run everywhere”, rồi dán đoạn code vào.
  3. Chèn vào functions.php:
    Dán đoạn mã vào functions.php của theme đang hoạt động. Cách này đơn giản nhưng có thể bị ghi đè khi cập nhật theme.

Kiểm tra kết quả

  • Đăng ký bằng [email protected] → username sẽ là example.
  • Đăng ký bằng [email protected] → username sẽ là example-1.
  • Thử với email có ký tự đặc biệt (ví dụ: [email protected]) để đảm bảo sanitize_user() hoạt động đúng.

Tương thích với các plugin SSO

Giải pháp này hoạt động ở tầng core của WordPress nên tương thích với hầu hết các plugin đăng nhập qua Google, OAuth hoặc Nextend Social Login. Nếu plugin nào đó ghi đè username sau hook pre_user_login, bạn có thể thay đổi độ ưu tiên của filter hoặc tìm hook riêng của plugin đó (như sitekit_user_register).

Bảo mật và thực hành tốt

  • Không nên hiển thị email làm username — giúp bảo mật thông tin người dùng.
  • Không tác động tới trường email, chỉ sửa username (user_login).
  • Luôn thử nghiệm trên staging trước khi áp dụng cho website thật.

Kết luận

Với một đoạn filter pre_user_login nhỏ gọn, bạn có thể xử lý triệt để vấn đề username bị biến dạng khi dùng Google Site Kit. Cách này giúp username trở nên gọn gàng, an toàn, dễ đọc và không còn lộ thông tin email người dùng — một giải pháp tối ưu và an toàn cho mọi website WordPress.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...