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