WordPress REST API에 대한 액세스 제한
WP REST API로 발신되는 URL 콜에 대한 접근을 제한할 수 있는 방법이 있습니까?WP REST API를 사용하여 URL에서 접속할 수 있는 AJAX 피드를 만들고 있습니다.포맷은 다음과 같습니다.http://example.com/wp-json/posts?type=post&filter[posts_per_page]=10
문제는 누구나 추가될 수 있다는 것이다./wp-json/posts?type=post&filter[posts_per_page]=10
이 정보의 피드를 가져옵니다.사용자가 WordPress에 로그인하지 않은 상태에서 다음과 같은 작업을 수행하지 않을 때 이 기능을 끄려고 합니다.
if ( !is_user_logged_in()) {
// Turn off REST API feed
}
또는 api를 마스크하기 위해 추가해야 하는 인증을 추가하고 싶습니다.
인터넷에서 이런 걸 찾았는데 아직 작동되지 않았어요.커스텀 플러그인에 추가했습니다.안타깝게도 로그인하지 않아도 피드에 액세스할 수 있습니다.
add_action( 'init', function() {
global $wp_post_types;
$wp_post_types['post']->show_in_rest = is_user_logged_in();
}, 20 );
API 활성화와 프런트 엔드의 HTTP 요청 사이에 연결이 되지 않아 걱정입니다.제가 잘못 생각하고 있는 건가요?이 문제에 부딪힌 사람이 있나요?
감사합니다!
Wordpress의 문제점과 장점은 특히 플랫폼이 깨끗한 방법을 제공하는 경우, Wordpress가 너무 많은 유연성을 제공한다는 것입니다: 모든 요청에 대해 인증 필요
is_user_logged_in 체크를 rest_authentication_errors 필터에 추가하여 모든 REST API 요구에 대해 인증을 요구할 수 있습니다.
주의: 착신콜백 파라미터는 늘, WP_Error 또는 부울 중 하나입니다.파라미터의 유형은 인증 상태를 나타냅니다.
- null: 인증체크는 아직 실행되지 않았으며 훅콜백은 커스텀 인증로직을 적용할 수 있습니다.
- boolean : 이전 인증방식 체크가 수행되었음을 나타냅니다.boolean true는 요청이 성공했음을 나타냅니다.
authenticated 및 boolean false는 인증에 실패했음을 나타냅니다.- WP_Error: 일종의 오류가 발생했습니다.
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.
if ( ! is_user_logged_in() ) {
return new WP_Error(
'rest_not_logged_in',
__( 'You are not currently logged in.' ),
array( 'status' => 401 )
);
}
// Our custom authentication check should have no effect
// on logged-in requests
return $result;
});
솔직히 자주 묻는 질문에는 이런 내용이 숨겨져 있습니다.
편집: jwt-auth를 제외하려면
global $wp;
// No authentication has been performed yet.
// Return an error if user is not logged in and not trying to login.
if ( ! is_user_logged_in() && $wp->request !== 'wp-json/jwt-auth/v1/token' ) {
return new WP_Error(
'rest_not_logged_in',
__( 'You are not currently logged in.' ),
array( 'status' => 401 )
);
}
로그인하지 않은 사용자의 WordPress 및 Woocommerce에 대한 모든 REST API 엔드포인트가 제거됩니다.
function myplugin_removes_api_endpoints_for_not_logged_in() {
if ( ! is_user_logged_in() ) {
// Removes WordpPress endpoints:
remove_action( 'rest_api_init', 'create_initial_rest_routes', 99 );
// Removes Woocommerce endpoints
if ( function_exists('WC') )
remove_action( 'rest_api_init', array( WC()->api, 'register_rest_routes' ), 10 );
}
} add_action('init', 'myplugin_removes_api_endpoints_for_not_logged_in');
로그인하지 않은 사용자의 REST API 전체가 차단됩니다.
function no_valid_user_no_rest($user) {
if (!$user) {
add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');
}
return $user;
}
add_filter('determine_current_user', 'no_valid_user_no_rest', 50);
REST를 끄기만 하면 된다는 일반적인 경고입니다.우선 순위가 다른 항목보다 높은지 확인합니다.determine_current_user
필터가 포함되어 있습니다.복수 사이트에서 테스트하지 않았다.
URL 또는 기타 요인에 따라 필터링하려는 경우 조건에 다른 테스트를 추가할 수도 있습니다.
언급URL : https://stackoverflow.com/questions/32082922/restrict-access-to-wordpress-rest-api
'programing' 카테고리의 다른 글
효소에서는 어댑터가 구성되어야 합니다. (0) | 2023.02.20 |
---|---|
Oracle: 시퀀스 MySequence.currval이 이 세션에서 아직 정의되지 않았습니다. (0) | 2023.02.20 |
React-Redux에서의 디스패치 기능 (0) | 2023.02.20 |
Word press 사용자 지정 메뉴에 하위 메뉴 (0) | 2023.02.20 |
AngularJS에서 div의 맨 위로 스크롤하시겠습니까? (0) | 2023.02.20 |