web-dev-qa-db-fra.com

WP-API: comment n'autoriser que les clients authentifiés?

J'ai configuré un client OAuth pour WP-API en suivant les instructions pour WP-API/OAuth1 sur github .

J'ai été déçu de constater par la suite que tout le contenu du site reste disponible via l'API, y compris toutes sortes de métadonnées peu publiques, telles que les dates d'enregistrement des utilisateurs. Je ne veux pas ça.

Comment restreindre l'API JSON pour autoriser uniquement les clients OAuth?

3
djb

C'est comme ça que je l'ai fait, mais je sens que cela pourrait être mieux. D'une part, cela donne HTTP 500 ... 403 serait préférable

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

(Je comprends que ça va marcher pour Basic Auth aussi)

3
djb

Parce que je devais gérer l'erreur dans plusieurs classes de code, j'ai commis une erreur globale dans mon gestionnaire d'authentification:

function json_myauthname_auth_handler( $user = false) {
    global $wp_json_myauthname_auth_error; 
    $wp_json_myauthname_auth_error = null;
    ...
}

Ensuite, si une erreur se produit, je règle le code d’erreur et le message appropriés:

$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 ) );

Ensuite, tout ce dont vous avez besoin est un filtre pour gérer la vérification des erreurs d'authentification

// 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' );

Si vous n'avez pas besoin de tout cela, vous pouvez simplement renvoyer l'erreur appropriée:

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