Câu trả lời:
Khi chúng tôi đăng ký một tuyến đường nghỉ ngơi với register_rest_route()
, sau đó chúng tôi có thể sử dụng permission_callback
tham số với loại quyền mà chúng tôi muốn.
Kiểm tra ví dụ như thế nào WP_REST_Posts_Controller::register_routes()
và WP_REST_Users_Controller::register_routes()
thực hiện gọi lại cho phép.
Đối số mật khẩu mà bạn đề cập đến là mật khẩu của nội dung mà bạn có thể đặt cho mỗi bài đăng và điều đó không giống nhau.
Nhưng vì bạn muốn nhắm mục tiêu các tuyến hiện có, như:
/wp/v2/cards
/wp/v2/cards/(?P<id>[\d]+)
/wp/v2/cards/...possibly some other patterns...
bạn có thể thử, ví dụ: rest_dispatch_request
bộ lọc để thiết lập kiểm tra quyền bổ sung cho các loại tuyến đường đó.
Đây là một plugin demo:
add_filter( 'rest_dispatch_request', function( $dispatch_result, $request, $route, $hndlr )
{
$target_base = '/wp/v2/cards'; // Edit to your needs
$pattern1 = untrailingslashit( $target_base ); // e.g. /wp/v2/cards
$pattern2 = trailingslashit( $target_base ); // e.g. /wp/v2/cards/
// Target only /wp/v2/cards and /wp/v2/cards/*
if( $pattern1 !== $route && $pattern2 !== substr( $route, 0, strlen( $pattern2 ) ) )
return $dispatch_result;
// Additional permission check
if( is_user_logged_in() ) // or e.g. current_user_can( 'manage_options' )
return $dispatch_result;
// Target GET method
if( WP_REST_Server::READABLE !== $request->get_method() )
return $dispatch_result;
return new \WP_Error(
'rest_forbidden',
esc_html__( 'Sorry, you are not allowed to do that.', 'wpse' ),
[ 'status' => 403 ]
);
}, 10, 4 );
nơi chúng tôi nhắm mục tiêu các tuyến /wp/v2/cards
và /wp/v2/cards/*
GET, với các kiểm tra cấp phép người dùng bổ sung.
Khi gỡ lỗi bằng xác thực cookie WordPress, chúng tôi có thể kiểm tra trực tiếp bằng:
https://example.tld/wp-json/wp/v2/cards?_wpnonce=9467a0bf9c
phần nonce đã được tạo ra từ đâu wp_create_nonce( 'wp_rest' );
Hi vọng điêu nay co ich!
register_post_type_args
bộ lọc và e, g, được đặt $args['show_in_rest'] = is_user_logged_in();
cho loại bài đăng nhất định hoặc dựa trên $args['rest_base']
. Không chắc chắn nếu điều đó muốn hay được đề xuất ;-)
Trường "mật khẩu" bạn đang thấy thực sự không dành cho API REST, mà dành cho chính mục nhập Bài đăng. Các bài đăng cá nhân trong WordPress có thể được bảo vệ bằng mật khẩu sao cho bạn cần mật khẩu để xem nội dung của chúng.
Hình thức mật khẩu bài cá nhân này không phải là một cơ chế mật khẩu mạnh, nó là một mật khẩu được chia sẻ. Mật khẩu giống nhau cho tất cả người dùng và nó được lưu trữ trong cơ sở dữ liệu không được mã hóa và không bị xóa. Nó không bao giờ được dự định là một cơ chế bảo mật bằng bất kỳ phương tiện nào, nó là một cơ chế đơn giản để ẩn nội dung một cách đơn giản.
Nếu bạn muốn sử dụng cơ chế này với API REST, thì có thể. Ví dụ: nếu ID của bài đăng cá nhân là 123, thì bài đăng có thể được truy xuất như vậy:
http://example.com/wp-json/wp/v2/posts/123
Nếu bài đăng đó được bảo vệ bằng mật khẩu, thì URL này sẽ truy xuất nó:
http://example.com/wp-json/wp/v2/posts/123?password=example-pass
Tham khảo: https://developer.wordpress.org/rest-api/reference/posts/#retrieve-a-post
Nếu bạn cần xác thực dựa trên người dùng mạnh mẽ hơn, thì WordPress sẽ cung cấp cách để đăng bài "riêng tư". Cài đặt này làm cho các bài đăng chỉ hiển thị đối với các tài khoản người dùng có khả năng "read_private_posts", được giới hạn ở vai trò Quản trị viên và Biên tập viên theo mặc định. (Lưu ý: Riêng tư chỉ làm cho nội dung bài đăng ở chế độ riêng tư, Tiêu đề của chúng vẫn có thể được hiển thị.)
Khi bạn tạo một loại bài đăng tùy chỉnh, khả năng tương tự này được ánh xạ tới số nhiều của loại của bạn (sử dụng số nhiều). Vì vậy, đối với loại bài đăng của thẻ, sẽ có quyền "read_private_cards" tương tự có sẵn để bạn gán cho vai trò người dùng nếu muốn.
Bây giờ, Xác thực ở cấp độ người dùng không thực sự được tích hợp vào API REST. Xác thực dựa trên cookie WordPress tiêu chuẩn hoạt động tốt, tuy nhiên API không cung cấp cách nào để có được cookie đó. Nó sẽ chấp nhận nó nếu nó có mặt, nhưng bạn phải thực hiện luồng đăng nhập bình thường để có được một cookie như vậy. Nếu bạn muốn một số phương pháp xác thực khác, thì bạn cần một plugin cho nó.
Bốn plugin như vậy tồn tại. Đó là OAuth 1.0, Mật khẩu ứng dụng, Mã thông báo web JSON và plugin Xác thực cơ bản. Lưu ý rằng Xác thực cơ bản là dễ nhất, tuy nhiên nó cũng không an toàn và do đó chỉ được khuyến nghị cho mục đích thử nghiệm và phát triển. Nó không nên được sử dụng trên một máy chủ sản xuất trực tiếp.
Bạn có thể tìm thêm thông tin về các plugin này tại đây:
https://developer.wordpress.org/rest-api/USE-the-rest-api/authentication/#authentication-plugins