最近我在我的网站上安装了WP REST API,它运行良好。但问题是,数据是通过开放URL向公众提供的,不需要身份验证。例如,对wp-json / wp / v2 / posts的get请求会向用户列出所有帖子详细信息。
有没有办法验证对WordPress REST API的GET请求?我不希望匿名用户可以使用这些数据。即使是基本的身份验证也适合我!
答案 0 :(得分:0)
您只能为使用此插件的已登录用户限制WP REST API https://wordpress.org/plugins/disable-json-api/
或者如果您不想使用插件,可以在主题中添加此代码
if( ! is_user_logged_in() ) {
add_filter( 'rest_authentication_errors', 'ultimatewoo_disable_rest_api' );
function disable_rest_api( $access ) {
return new WP_Error( 'rest_disabled', __( 'The REST API on this site has been disabled.' ), array( 'status' => rest_authorization_required_code() ) );
}}
答案 1 :(得分:0)
您需要在/wp-includes/default-filters.php
找到此部分:
// REST API filters.
add_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' );
add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 );
add_action( 'template_redirect', 'rest_output_link_header', 11, 0 );
add_action( 'auth_cookie_malformed', 'rest_cookie_collect_status' );
add_action( 'auth_cookie_expired', 'rest_cookie_collect_status' );
add_action( 'auth_cookie_bad_username', 'rest_cookie_collect_status' );
add_action( 'auth_cookie_bad_hash', 'rest_cookie_collect_status' );
add_action( 'auth_cookie_valid', 'rest_cookie_collect_status' );
add_filter( 'rest_authentication_errors', 'rest_cookie_check_errors', 100 );
然后添加一个新的过滤器,如下所示:
add_filter( 'rest_authentication_errors', function( $result ) {
if ( ! empty( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) );
}
return $result;
});
此解决方案是mentioned on the WordPress developer resources site,但是它们没有明确告诉您将过滤器添加到何处。
进行此更改之后,未经身份验证的用户尝试连接REST API时,您应该看到以下消息:
{"code":"rest_not_logged_in","message":"You are not currently logged in.","data":{"status":401}}
答案 2 :(得分:0)
可以通过ip限制
add_filter( 'rest_authentication_errors', 'filter_incoming_connections' );
function filter_incoming_connections( $errors ){
$allowedAddress = array( '127.0.0.1' );
$requestServer = $_SERVER['REMOTE_ADDR'];
if( ! in_array( $requestServer, $allowedAddress ) )
return new WP_Error( 'forbidden_access', 'Access denied', array( 'status' => 403 ) );
return $errors;
}
$ allowedAddress添加授权的IP
答案 3 :(得分:-1)
您可以尝试使用此代码更改该代码。
add_filter( 'rest_authentication_errors', function( $result ) {
if ( ! empty( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
return new WP_Error( 'restx_logged_out', 'Sorry, you must be logged in to make a request.', array( 'status' => 401 ) );
}
return $result;
});