按IP地址限制用户登录

时间:2016-07-28 作者:Futwill

我有一个网站,需要登录才能让用户查看该网站。我已经为所有内部成员设置了一个用于查看网站的用户,但是我只想将该用户限制为我们的特定IP地址。

我可以看到,您可以通过htaccess将整个站点的访问限制为IP地址,但我只需要为一个用户实现它,因此他们只能从我们的IP地址查看网站。

这可能吗?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

身份验证期间的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    );
应该可以扩展它来处理一组用户或给定的用户角色。