Zur Navigation

Wordpress Filter redirect_to

1 Jan

Hallo Jörg,

ich habe einen bestehenden Filter in der functions.php (im Child-Theme)

add_filter( 'rest_authentication_errors', function( $result ) {
        // If a previous authentication check was applied,
        // pass that result along without modification.
        if ( true === $result || is_wp_error( $result ) ) {
            return $result;
        }
     
        // No authentication has been performed yet.
        // Return an error if user is not logged in.
        if ( ! is_user_logged_in() ) {
            return new WP_Error(
                'rest_not_logged_in',
                __( 'You are not currently logged in.' ),
                array( 'status' => 401 )
            );
        }
     
        // Our custom authentication check should have no effect
        // on logged-in requests
        return $result;
    });

Damit ist die REST-API ja für nicht angemeldete User gesperrt und beim Besuch gibt es eine Fehlermeldung und den Status-Code 401

Wie schreibe ich den Part so um das auf eine eigene Fehlerseite 401.php umgeleitet wird?

Dafür gibt es unter WP wohl $redirect_to ... Mir ist aber nicht klar wie ich das umbauen kann :-(

Es soll auf eine eigene 401.php umgeleitet werden da ich die vollständige IP des Besuchers haben möchte.

Oder kann ich das auch anders nur über die .htaccess lösen?

Am Server loggt sich nur einer als User ein, das bin ich ;-) Damit müsste es doch reichen wenn ich den Zugriff auf /wp-json/* auf meine eigene und die feste Server-IP beschränke? Vermutlich nicht ... weshalb ich dich mal lieber frage ;-)

Mit freundlichen Grüßen - Jan

14.08.2023 11:12

2 Jörg Kruse

Es soll auf eine eigene 401.php umgeleitet werden da ich die vollständige IP des Besuchers haben möchte.

Die IP-Adresse kannst du ja an Ort und Stelle loggen?

beipielsweise so:

        if ( ! is_user_logged_in() ) {
            // IP-Adresse in Datei pfad/zur/rest-401.log loggen
            // Datei muss beschreibbar sein
            $401_log = fopen( "pfad/zur/rest-401.log", "a" ); 
            fwrite( $401_log, date( 'Y-m-d h:i:s' ) . " " . $_SERVER['REMOTE_(ADDR'] . "\n" ); 
            fclose( $401_log ); 
            return new WP_Error(
                'rest_not_logged_in',
                __( 'You are not currently logged in.' ),
                array( 'status' => 401 )
            );
        }

Erst umleiten und dann 401 Error ausgeben wäre etwas schräg. Damit verbietest du nur den Aufruf der Zielseite 401.php.

Nachtrag:

bei sehr vielen Zugriffen muss die Logdatei natürlich regelmäßig rotiert werden

14.08.2023 11:53 | geändert: 14.08.2023 12:01

1 Forenmitglied fand diesen Beitrag gut

3 Jan

Hallo Jörg,

Vielen Dank! Das funktioniert genau wie gewünscht!

Die Logs werden von mir täglich gesichtet und bearbeitet ;-)

Mit freundlichen Grüßen - Jan

16.08.2023 12:18

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]