web-dev-qa-db-ja.com

IPアドレスによるユーザーログインの制限

ユーザーがウェブサイトを見るためにはログインが必要なウェブサイトがあります。私はすべての内部メンバーがウェブサイトを見るために使用するために一人のユーザーを設定しました、しかし私は私達の特定のIPアドレスにそのユーザーだけを制限したいです。

私はあなたがサイト全体のアクセスをhtaccess経由でIPアドレスに制限することができるのを見ることができます、しかし私はそれを1人のユーザーのために実装する必要があるだけです。

これは可能ですか?

1
Futwill

認証中のIPアドレス検証 - 選択したユーザーのみ

これはauthenticateフィルタにフックして、認証中に特定のユーザーのIPアドレスを検証する方法です。

ユーザーはここに示されているように無効なIPアドレスエラーを見ることができます:

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

ここでは、これらのデフォルトのコールバックのために優先順位100を使います。

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

これを拡張して、ユーザーのグループまたは特定のユーザーロールを処理することが可能です。

2
birgire