web-dev-qa-db-ja.com

WP-API:認証されたクライアントのみを許可するにはどうすればいいですか?

githubではWP-API/OAuth1 の説明に従って、WP-API用のOAuthクライアントをセットアップしました。

その後、ユーザー登録日などの非公式のメタデータを含め、すべてのサイトのコンテンツがAPIを介して利用できることに気づいたのは残念です。私はこれが欲しくないです。

OAuthクライアントのみを許可するようにJSON APIを制限する方法

3
djb

これは私がやったことですが、私はそれがもっと良いかもしれないと感じます。一つには、HTTP 500 ... 403という結果になるでしょう。

add_filter( 'json_authentication_errors', function( $authenticated ) {
    if( !$authenticated ) {
        return new WP_Error('Access Denied');
    }
}, 99 );

(私はこれがBasic Authにもうまくいくことを理解しています)

3
djb

さまざまなクラスのさまざまなコード領域でエラーを処理する必要があったため、認証ハンドラでグローバルエラーを作成しました。

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 ) );
0
brianlmerritt