【问题标题】:Blocking SOME but not all endpoints in Wordpress rest api阻止 Wordpress rest api 中的一些但不是所有端点
【发布时间】:2020-09-20 21:23:25
【问题描述】:

我正在创建一个通过其余 API 使用 wordpress 作为后端的 REACT 应用程序。我正在使用 Simple-JWT-Login 插件来处理注册、登录、身份验证,并且效果很好。

我想阻止未登录的用户访问 /wp/v2/posts 端点。我知道我可以通过以下方式做到这一点:


    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 ) );
      }
      if ( ! current_user_can( 'edit_posts' ) ) {
        return new WP_Error( 'rest_not_admin', 'You are not entitled to view that.', array( 'status' => 401 ) );
      }
      return $result;
    });

但是,这会阻止所有端点,包括 ?rest_route=/simple-jwt-login/v1/auth?rest_route=/simple-jwt-login/v1/users,它们来自用于注册和验证用户的 Simple-JWT-Login 插件。因此,用户最终会遇到第 22 个问题,除非他们已经登录,否则他们无法登录!

有没有办法修改上述代码以仅阻止 wp/v2/posts/ 端点,或者有效地将注册和身份验证端点列入白名单?

非常感谢您的任何想法!

已经在这里和其他地方搜索过,但找不到解决方案。

【问题讨论】:

  • 您好,在探索 wp rest API 时,我遇到了同样的问题。你终于找到解决办法了吗?我正在徘徊如何创建端点白名单来解决这个问题
  • 抱歉回复晚了 - 看不到通知。不,不幸的是我从来没有得到任何地方。如果您在此期间找到了解决方案,很高兴知道!

标签: endpoint wordpress-rest-api


【解决方案1】:

您始终可以在使用 $_SERVER['REQUEST_URI'] 显示错误之前检查 url,但是在 if 检查中添加所有允许的 url 可能会很麻烦。

我喜欢使用 apache_request_headers 和 preg_match 来检查承载令牌,如果当前请求具有正确的承载令牌,则显示结果。否则你会抛出一个错误。我不能保证它 100% 安全或正确的方法,但它对于一个超级基本的简单系统来说效果很好。

下面的代码可能对某人有用:

add_filter("rest_authentication_errors", function ($result) {

if (!empty($result)) {
    return $result;
}

$headers = apache_request_headers();
  
$matches = array();

$currentToken = "PUT YOUR BEARER TOKEN HERE";
$pattern = $currentToken."/i";
        
preg_match('/Bearer '. $pattern, $headers['Authorization'], $matches);

        
if(isset($matches)){
            
    $token = $matches[0];
         
    
    if($token == 'Bearer ' . $currentToken){
        
        
        return $result;
        
        
    } else {
        
         return new WP_Error( 'no_auth_found', 'You are not currently logged in.' , array( 'status' => 401));
        
    }
    
        
}
        

});

【讨论】:

    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2019-04-07
    相关资源
    最近更新 更多