[API] Authentication

https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/

Xác thực cookie là phương pháp xác thực tiêu chuẩn được bao gồm trong WordPress. Khi bạn đăng nhập vào trang tổng quan của mình, điều này sẽ thiết lập cookie một cách chính xác cho bạn, vì vậy các nhà phát triển plugin và chủ đề chỉ cần có một người dùng đã đăng nhập.

Tuy nhiên, REST API bao gồm một kỹ thuật được gọi là nonces để tránh các vấn đề CSRF. Điều này ngăn các trang web khác buộc bạn thực hiện các hành động mà không có ý định rõ ràng. Điều này yêu cầu xử lý hơi đặc biệt cho API.

Đối với các nhà phát triển sử dụng API Javascript tích hợp, điều này được xử lý tự động cho bạn. Đây là cách được khuyến nghị để sử dụng API cho các plugin và chủ đề. Mô hình dữ liệu tùy chỉnh có thể mở rộng wp.api.models.Base để đảm bảo điều này được gửi chính xác cho bất kỳ yêu cầu tùy chỉnh nào.

Đối với các nhà phát triển thực hiện các yêu cầu Ajax thủ công, nonce sẽ cần được chuyển với mỗi yêu cầu. API sử dụng các nonces với hành động được đặt thành wp_rest. Sau đó, chúng có thể được chuyển tới API thông qua tham số dữ liệu _wpnonce (hoặc dữ liệu POST hoặc trong truy vấn cho các yêu cầu GET) hoặc qua tiêu đề X-WP-Nonce. Nếu không có nonce nào được cung cấp, API sẽ đặt người dùng hiện tại thành 0, biến yêu cầu thành yêu cầu chưa được xác thực, ngay cả khi bạn đã đăng nhập vào WordPress.

Lưu ý: Cho đến gần đây, hầu hết phần mềm đều có hỗ trợ ngay lập tức cho các yêu cầu DELETE. Ví dụ: PHP không chuyển đổi phần thân yêu cầu của một yêu cầu DELETE thành một siêu toàn cục. Do đó, cung cấp nonce làm tiêu đề là cách tiếp cận đáng tin cậy nhất.

Điều quan trọng cần lưu ý là phương pháp xác thực này dựa trên cookie của WordPress. Do đó, phương pháp này chỉ áp dụng được khi API REST được sử dụng bên trong WordPress và người dùng hiện tại đã đăng nhập. Ngoài ra, người dùng hiện tại phải có khả năng thích hợp để thực hiện hành động đang được thực hiện.

Ví dụ: đây là cách ứng dụng khách Javascript cài sẵn tạo ra nonce:

<?php
    wp_localize_script( 'wp-api', 'wpApiSettings', array(
        'root' => esc_url_raw( rest_url() ),
        'nonce' => wp_create_nonce( 'wp_rest' )
    ) );
?>

Điều này sau đó được sử dụng trong mô hình cơ sở:

options.beforeSend = function(xhr) {
    xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce);
 
    if (beforeSend) {
        return beforeSend.apply(this, arguments);
    }
};

Đây là một ví dụ về chỉnh sửa tiêu đề của một bài đăng, sử dụng jQuery AJAX:

$.ajax( {
    url: wpApiSettings.root + 'wp/v2/posts/1',
    method: 'POST',
    beforeSend: function ( xhr ) {
        xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
    },
    data:{
        'title' : 'Hello Moon'
    }
} ).done( function ( response ) {
    console.log( response );
} );

Lưu ý rằng bạn không cần xác minh rằng nonce hợp lệ bên trong điểm kết thúc tùy chỉnh của bạn. Điều này được thực hiện tự động cho bạn trong rest_cookie_check_errors ()

Xem ví dụ: https://app.gitbook.com/@wordpress-lionel/s/project/api-mot-vi-du-su-dung-authentication-de-chinh-sua-tieu-de-bai-viet-bang-ajax-ok

Authentication Plugins

Mặc dù xác thực cookie là cơ chế xác thực duy nhất có sẵn trong WordPress, nhưng các plugin có thể được thêm vào để hỗ trợ các chế độ xác thực thay thế sẽ hoạt động từ các ứng dụng từ xa. Một số plugin mẫu là Máy chủ OAuth 1.0a, Mật khẩu ứng dụng và Mã thông báo web JSON.

Last updated