因此,只是为 BuddyPress 的答案提供一些背景信息。简而言之,Memberpress 所做的是限制前端访问,但仍然可以执行任何 REST API 请求,因此任何有一点知识的人都可以访问您的受限内容。
我对这些服务(BuddyPress)中的任何一个都不熟悉,因此以下答案通常是关于 Wordpress REST API 的。
is_user_logged_in
您可以通过向过滤器添加一个检查来要求对所有 REST API 请求进行身份验证,该检查rest_authentication_errors
将阻止任何外部请求,为登录用户锁定您的内容。这可以很容易地适应特定角色,例如:使用付费会员时。
以下示例将阻止非登录用户和非管理员的任何 REST API 请求。
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
};
/**
* Require authentication for all requests. Prevent blank or empty bots request.
*
* Filters REST API authentication errors.
*
* @link https://developer.wordpress.org/rest-api/frequently-asked-questions/#require-authentication-for-all-requests
*/
add_filter( 'rest_authentication_errors', function( $result ) {
// If a previous authentication check was applied,
// pass that result along without modification.
if ( true === $result || is_wp_error( $result ) ) {
return $result;
};
// No authentication has been performed yet.
// Return an error if user is not logged in or isn't a Admin, Editor or Author
if ( ! is_user_logged_in() || ! current_user_can( 'publish_posts' ) ) {
header( 'Refresh: 1; ' . esc_url( home_url() ) );
return new WP_Error(
'rest_not_logged_in',
__( 'You are not currently logged in OR are not allowed.' ),
array( 'status' => 401 )
);
};
// Our custom authentication check should have no effect
// on logged-in requests
return $result;
} );