it-swarm.com.de

Einschränkung der Benutzeranmeldung nach IP-Adresse

Ich habe eine Website, für die eine Anmeldung erforderlich ist, damit Benutzer die Website anzeigen können. Ich habe einen Benutzer für alle internen Mitglieder zum Anzeigen der Website eingerichtet, möchte jedoch nur diesen Benutzer auf unsere spezifische IP-Adresse beschränken.

Ich kann sehen, dass Sie den Zugriff auf eine IP-Adresse über htaccess auf die gesamte Site beschränken können, aber ich muss ihn nur für einen Benutzer implementieren, damit er die Website nur von unserer IP-Adresse aus anzeigen kann.

Ist das möglich?

1
Futwill

IP-Adressüberprüfung während der Authentifizierung - nur für einen ausgewählten Benutzer

Hier ist eine Möglichkeit, sich in den Filter authenticate einzuhängen und die IP-Adresse für einen bestimmten Benutzer während der Authentifizierung zu überprüfen.

Der Benutzer kann den Fehler mit ungültiger IP-Adresse sehen, wie hier gezeigt:

invalid IP address

/**
 * Validate IP Address During Authentication - For A Given User 
 */
add_filter( 'authenticate', function( $user )
{
    // Adjust to your needs:
    $allowed_user_ip        = '127.0.0.1';
    $ip_restricted_user_id  = 1;

    // Current user's IP address
    $current_user_ip = isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : null;

    // Nothing to do for valid IP address
    if( $current_user_ip === $allowed_user_ip )
        return $user;

    // Nothing to do for users that are not IP restricted 
    if( 
           $user instanceof \WP_User 
        && $user->ID > 0
        && $ip_restricted_user_id != $user->ID
    )   
        return $user;

    // Add an 'Invalid IP address' error
    if( is_wp_error( $user ) )
        $user->add( 
            'invalid_ip', 
            sprintf(
            '<strong>%s</strong>: %s',
            esc_html__( 'ERROR', 'mydomain' ),
            esc_html__( 'IP address is invalid.', 'mydomain' )
        )
    ); 
    // Create a new 'Invalid IP address' error
    else
        $user = new WP_Error(
            'invalid_ip', 
            sprintf(
                '<strong>%s</strong>: %s',
                esc_html__( 'ERROR', 'mydomain' ),
                esc_html__( 'IP address is invalid.', 'mydomain' )
            )
        ); 

    return $user;
}, 100 );

Hier verwenden wir die Priorität 100 aufgrund dieser Standardrückrufe:

add_filter( 'authenticate', 'wp_authenticate_username_password',  20, 3 );
add_filter( 'authenticate', 'wp_authenticate_email_password',     20, 3 );
add_filter( 'authenticate', 'wp_authenticate_spam_check',         99    );

Es sollte möglich sein, dies zu erweitern, um eine Gruppe von Benutzern oder eine bestimmte Benutzerrolle zu behandeln.

2
birgire