Tích hợp đăng nhập bằng Facebook vào WordPress mà không sử dụng plugin. Điều này phức tạp và đòi hỏi kiến thức về lập trình PHP và WordPress API. Dưới đây là hướng dẫn các bước cơ bản và những điểm cần lưu ý:

Lưu ý quan trọng:

  • Đây là một quy trình phức tạp và dễ xảy ra lỗi nếu bạn không có kinh nghiệm lập trình PHP và WordPress.
  • Việc tự tích hợp có thể khó khăn trong việc bảo trì và cập nhật khi Facebook API có thay đổi.
  • Bạn sẽ cần tự xử lý các vấn đề bảo mật liên quan đến việc xác thực người dùng và lưu trữ thông tin.

Tuy nhiên, nếu bạn vẫn muốn tiến hành, đây là các bước cơ bản:

1. Tạo Ứng dụng Facebook:

  • Truy cập trang Facebook for Developers.
  • Đăng nhập bằng tài khoản Facebook của bạn.
  • Nhấp vào My Apps > Create App.
  • Chọn Consumer và nhấp Next.
  • Nhập Display Name (ví dụ: tên website WordPress của bạn).
  • Nhập Contact Email.
  • Nhấp vào Create App ID.
  • Đi đến Settings > Basic.
  • Lưu lại App IDApp Secret.
  • Nhấp vào Add Platform và chọn Website.
  • Nhập Site URL của website WordPress của bạn (ví dụ: https://ten_mien.com).
  • Nhấp vào Save Changes.
  • Trong menu bên trái, nhấp vào Facebook Login > Settings.
  • Trong trường Valid OAuth Redirect URIs, hãy nhập URL callback của bạn. Đối với plugin Nextend Social Login, URL này thường có dạng: https://yourdomain.com/?hauth.done=Facebook (hãy kiểm tra lại trong cài đặt plugin sau khi cài đặt để chắc chắn).
  • Nhấp vào Save Changes.

    2. Tạo Trang Callback trong WordPress:

    • Bạn cần tạo một trang PHP trong theme WordPress của mình (hoặc tạo một plugin tùy chỉnh) để xử lý phản hồi từ Facebook sau khi người dùng ủy quyền. Ví dụ: bạn có thể tạo một file facebook-login-callback.php trong thư mục theme hiện tại của bạn.
    • Trong file này, bạn sẽ sử dụng Facebook PHP SDK để lấy access token và thông tin người dùng.

    3. Cài đặt Facebook PHP SDK:

    Bạn có thể cài đặt Facebook PHP SDK bằng Composer trong thư mục theme hoặc plugin tùy chỉnh của bạn. Mở terminal hoặc command prompt, điều hướng đến thư mục đó và chạy:

    composer require facebook/graph-sdk
    

    Sau đó, bạn có thể include file autoload.php trong code của mình.

    4. Viết Code PHP cho Trang Callback:

    <?php
    /**
     * Template Name: Facebook Login Callback
     */
    
    require_once __DIR__ . '/vendor/autoload.php'; // Đường dẫn đến autoload.php của Composer
    
    // Kiểm tra xem có phải là trang WordPress hay không
    if (!defined('ABSPATH')) {
        exit;
    }
    
    $fb = new Facebook\Facebook([
        'app_id' => 'YOUR_APP_ID', // Thay bằng App ID của bạn
        'app_secret' => 'YOUR_APP_SECRET', // Thay bằng App Secret của bạn
        'default_graph_version' => 'v19.0', // Chọn phiên bản Graph API mới nhất
    ]);
    
    $helper = $fb->getRedirectLoginHelper();
    
    try {
        $accessToken = $helper->getAccessToken();
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        // When Graph returns an error
        error_log('Facebook Graph returned an error: ' . $e->getMessage());
        wp_die('Đã xảy ra lỗi khi đăng nhập bằng Facebook.');
        exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        // When validation fails or other local issues
        error_log('Facebook SDK returned an error: ' . $e->getMessage());
        wp_die('Đã xảy ra lỗi khi đăng nhập bằng Facebook.');
        exit;
    }
    
    if (!isset($accessToken)) {
        // Xử lý trường hợp người dùng từ chối đăng nhập hoặc có lỗi
        wp_die('Không thể lấy access token từ Facebook.');
        exit;
    }
    
    // Lấy thông tin người dùng từ Facebook
    try {
        $response = $fb->get('/me?fields=id,name,email', $accessToken);
        $user = $response->getGraphUser();
    
        $facebook_id = $user->getId();
        $name = $user->getName();
        $email = $user->getEmail();
    
        // Kiểm tra xem người dùng Facebook này đã tồn tại trong WordPress chưa (dựa trên facebook_id hoặc email)
        $existing_user = get_users(array(
            'meta_key' => 'facebook_id',
            'meta_value' => $facebook_id,
            'number' => 1,
        ));
    
        if ($existing_user) {
            // Đăng nhập người dùng WordPress hiện có
            wp_set_auth_cookie($existing_user[0]->ID, true);
            wp_redirect(home_url()); // Chuyển hướng về trang chủ
            exit;
        } else {
            // Kiểm tra xem email đã tồn tại chưa
            if ($email) {
                $user_by_email = get_user_by('email', $email);
                if ($user_by_email) {
                    // Liên kết tài khoản Facebook với tài khoản WordPress hiện có
                    update_user_meta($user_by_email->ID, 'facebook_id', $facebook_id);
                    wp_set_auth_cookie($user_by_email->ID, true);
                    wp_redirect(home_url()); // Chuyển hướng về trang chủ
                    exit;
                }
            }
    
            // Tạo tài khoản WordPress mới cho người dùng Facebook
            $new_user_data = array(
                'user_login' => sanitize_user(str_replace(' ', '.', $name) . '_' . $facebook_id), // Tạo username duy nhất
                'user_pass'  => wp_generate_password(), // Tạo mật khẩu ngẫu nhiên
                'user_email' => $email ? $email : '',
                'display_name' => $name,
                'first_name' => '', // Bạn có thể tách tên nếu muốn
                'last_name' => '',
            );
    
            $user_id = wp_insert_user($new_user_data);
    
            if (!is_wp_error($user_id)) {
                // Lưu Facebook ID vào meta của người dùng
                update_user_meta($user_id, 'facebook_id', $facebook_id);
    
                // Gửi email thông báo tài khoản (tùy chọn)
                wp_new_user_notification($user_id, null, 'both');
    
                // Đăng nhập người dùng mới tạo
                wp_set_auth_cookie($user_id, true);
                wp_redirect(home_url()); // Chuyển hướng về trang chủ
                exit;
            } else {
                error_log('Lỗi khi tạo người dùng WordPress: ' . $user_id->get_error_message());
                wp_die('Đã xảy ra lỗi khi tạo tài khoản.');
                exit;
            }
        }
    
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        error_log('Facebook Graph returned an error: ' . $e->getMessage());
        wp_die('Đã xảy ra lỗi khi lấy thông tin người dùng từ Facebook.');
        exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        error_log('Facebook SDK returned an error: ' . $e->getMessage());
        wp_die('Đã xảy ra lỗi khi tương tác với Facebook SDK.');
        exit;
    }
    
    get_header(); // Nếu bạn muốn hiển thị giao diện WordPress
    ?>
    
    <div id="primary" class="content-area">
        <main id="main" class="site-main">
            <h1>Đang xử lý đăng nhập Facebook...</h1>
            <p>Bạn sẽ được chuyển hướng sau giây lát.</p>
        </main></div><?php
    get_sidebar(); // Nếu bạn muốn hiển thị sidebar
    get_footer(); // Nếu bạn muốn hiển thị footer
    ?>
    

    Giải thích code callback:

    • Include file autoload.php của Composer.
    • Khởi tạo đối tượng Facebook\Facebook.
    • Lấy accessToken từ phản hồi của Facebook.
    • Nếu có lỗi khi lấy accessToken, hiển thị thông báo lỗi.
    • Sử dụng accessToken để lấy thông tin người dùng (id, name, email).
    • Kiểm tra xem người dùng Facebook đã tồn tại trong WordPress chưa dựa trên facebook_id.
    • Nếu tồn tại, đăng nhập người dùng WordPress.
    • Nếu chưa tồn tại, kiểm tra xem email đã tồn tại chưa và liên kết (nếu muốn) hoặc tạo một tài khoản WordPress mới.
    • Đăng nhập người dùng WordPress mới tạo.
    • Chuyển hướng người dùng về trang chủ.
    • Xử lý các trường hợp lỗi khác.

    5. Tạo Liên kết Đăng nhập Facebook:

    • Bạn cần tạo một liên kết trên website của mình để người dùng bắt đầu quá trình đăng nhập Facebook. Bạn có thể thêm liên kết này vào trang đăng nhập WordPress (wp-login.php), sidebar, hoặc bất kỳ vị trí nào bạn muốn.
    • Bạn có thể đặt đoạn code này vào file wp-login.php (cẩn thận khi chỉnh sửa file core), hoặc tạo một shortcode để chèn vào các trang/bài viết.
    <?php
    $fb = new Facebook\Facebook([
        'app_id' => 'YOUR_APP_ID', // Thay bằng App ID của bạn
        'app_secret' => 'YOUR_APP_SECRET', // Thay bằng App Secret của bạn
        'default_graph_version' => 'v19.0', // Chọn phiên bản Graph API mới nhất
    ]);
    
    $helper = $fb->getRedirectLoginHelper();
    $permissions = ['email']; // Các quyền bạn muốn yêu cầu
    $loginUrl = $helper->getLoginUrl('https://yourdomain.com/facebook-login-callback', $permissions); // Thay bằng URL callback của bạn
    
    echo '<a href="' . esc_url($loginUrl) . '">Đăng nhập bằng Facebook</a>';
    ?>
    

    6. Thêm trường facebook_id vào cơ sở dữ liệu WordPress:

    Bạn có thể sử dụng update_user_meta() để lưu facebook_id của người dùng vào bảng wp_usermeta. Điều này giúp bạn liên kết tài khoản Facebook với tài khoản WordPress.

    7. Xử lý Đăng xuất (tùy chọn):

    Nếu bạn muốn cung cấp tùy chọn đăng xuất riêng cho người dùng Facebook, bạn có thể đơn giản là sử dụng hàm wp_logout() của WordPress để xóa cookie xác thực.

    Rủi ro và Cân nhắc:

    • Bảo mật: Bạn cần đảm bảo rằng quy trình xác thực và lưu trữ thông tin người dùng được thực hiện một cách an toàn.
    • Bảo trì: Khi Facebook API có thay đổi, bạn sẽ cần cập nhật code của mình để đảm bảo tính tương thích.
    • Tương thích theme/plugin: Việc tự tích hợp có thể gây ra xung đột với các theme hoặc plugin khác trên website của bạn.
    • Thời gian và công sức: Việc tự tích hợp đòi hỏi nhiều thời gian và công sức hơn so với việc sử dụng plugin.

    Lời khuyên:

    Nếu bạn không có kinh nghiệm lập trình PHP và WordPress chuyên sâu, việc sử dụng một plugin đáng tin cậy là lựa chọn an toàn và hiệu quả hơn. Các plugin này thường đã xử lý các vấn đề bảo mật, cập nhật API và cung cấp giao diện người dùng thân thiện để cấu hình.

    Tuy nhiên, nếu bạn muốn học hỏi và có đủ kiến thức, việc tự tích hợp là một thử thách thú vị. Hãy đảm bảo bạn hiểu rõ các khái niệm về OAuth 2.0, Facebook API và WordPress API trước khi bắt đầu.

    Recent posts

    Hàng siêu cao cấp, iPhone gập sẽ có giá cao ngất ngưởng

    Hàng siêu cao cấp, iPhone gập sẽ có giá cao ngất ngưởng

    iPhone Fold – chiếc iPhone gập được đồn đại từ lâu của Apple – có thể sẽ là một sản […]

    Người dùng iPhone cần cập nhật ngay iOS 18.4.1 vì lý do bảo mật nghiêm trọng

    Người dùng iPhone cần cập nhật ngay iOS 18.4.1 vì lý do bảo mật nghiêm trọng

    Apple cho biết các lỗ hổng bảo mật này có khả năng đã được sử dụng trong một cuộc tấn […]

    [Thủ thuật] Xóa menu “WordPress” khỏi thanh quản trị

    [Thủ thuật] Xóa menu “WordPress” khỏi thanh quản trị

    Bạn muốn xóa menu “WordPress” (thường có biểu tượng chữ W) khỏi thanh quản trị (wp-admin bar) và các mục […]

    POCO M7 Pro mẫu smartphone 5G giá siêu rẻ của Xiaomi

    POCO M7 Pro mẫu smartphone 5G giá siêu rẻ của Xiaomi

    POCO M7 Pro là mẫu smartphone 5G giá siêu rẻ của Xiaomi, chỉ hơn 4 triệu đồng nhưng vẫn được […]

    Hóa ra “đường link màu tím” trên Chrome không chỉ là tính năng, nó còn là lỗ hổng bảo mật 16 năm tuổi

    Hóa ra “đường link màu tím” trên Chrome không chỉ là tính năng, nó còn là lỗ hổng bảo mật 16 năm tuổi

    Chỉ mới đây thôi, Google phát hành bản vá cho một lỗ hổng nghiêm trọng trong trình duyệt Chrome đã […]

    © 2021 Tạp Chí CNTT. Mr Hoang