WP-API: Wie erlaube ich nur authentifizierten Clients?

Ich habe einen OAuth-Client für WP-API nach den statementen für WP-API / OAuth1 auf GitHub eingerichtet .

Ich war enttäuscht, als ich nachher merkte, dass der gesamte Inhalt der Website über die API verfügbar bleibt, einschließlich aller nicht wirklich öffentlichen Metadaten wie Benutzerregistrierungsdaten. Ich will das nicht.

Wie schränke ich die JSON-API so ein, dass nur OAuth-Clients zugelassen werden?

Solutions Collecting From Web of "WP-API: Wie erlaube ich nur authentifizierten Clients?"

So habe ich es gemacht, aber ich denke, es könnte besser sein. Zum einen würde dies zu HTTP 500 … 403 führen

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

(Ich verstehe, dass dies auch für Basic Auth funktioniert)

Da ich den Fehler in verschiedenen Codebereichen in verschiedenen classn behandeln musste, habe ich einen globalen Fehler in meinem Auth-Handler gemacht:

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

Wenn dann irgendwo ein Fehler auftrat, setze ich den entsprechenden Fehlercode und die entsprechende Nachricht:

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

Dann brauchen Sie nur noch einen Filter, um die Authentifizierungserrors zu überprüfen

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

Wenn Sie nicht alles benötigen, können Sie einfach den entsprechenden Fehler zurückgeben:

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