WP-API:如何只允许经过身份验证的客户端?

时间:2015-01-29 作者:djb

我按照以下说明为WP-API设置了OAuth客户端WP-API/OAuth1 on github.

后来我失望地意识到,该网站的所有内容仍然可以通过API访问,包括各种非真正公开的元数据,如用户注册日期。我不要这个。

如何限制JSON API只允许OAuth客户端?

2 个回复
SO网友:djb

我就是这样做的,但我觉得可以做得更好。首先,这会导致HTTP 500。。。最好是403

add_filter( \'json_authentication_errors\', function( $authenticated ) {
    if( !$authenticated ) {
        return new WP_Error(\'Access Denied\');
    }
}, 99 );
(我知道这也适用于Basic Auth)

SO网友:brianlmerritt

因为我必须在不同类中处理多个不同代码区域的错误,所以我在身份验证处理程序中出现了一个全局错误:

function json_myauthname_auth_handler( $user = false) {
    global $wp_json_myauthname_auth_error; 
    $wp_json_myauthname_auth_error = null;
    ...
}
然后,如果在任何地方发生错误,我会设置相应的错误代码和消息:

$wp_json_myauthname_auth_error = new WP_Error( \'json_login_failed\', __( "We didn\'t recognize your email address or password. Please try again." ), array( \'status\' => 401 ) );
然后,您只需要一个过滤器来处理身份验证错误的检查

// Error handling 
function json_myauthname_auth_error( $error ) {
    // Passthrough other errors
    if ( ! empty( $error ) ) {
        return $error;
    }
}
add_filter( \'json_authentication_errors\', \'json_myauthname_auth_error\' );
如果不需要所有这些,可以返回相应的错误:

return new WP_Error( \'json_login_failed\', __( "We didn\'t recognize your email address or password. Please try again." ), array( \'status\' => 401 ) );

结束

相关推荐

使用相同OAuth类问题的多个插件

我刚刚更新了一个需要更新的插件。问题是他们添加了对OAuth的支持,这个插件和另一个插件使用相同的OAuth类。有没有简单的方法来解决这个问题?我从来没有弄乱过OAuth或PHP中的类,我不是程序员。错误:PHP Fatal error: Cannot redeclare class OAuthSignatureMethod_HMAC_SHA1