WordPress身份验证中间件

时间:2014-10-23 作者:Laxmana

我想要实现的是:

对于每个请求,如果用户没有登录,他/她将被重定向到登录页面。如果用户已登录,则他/她可以访问该站点。

class Auth{

    protected static $instance = null;

    public function checkAuth(){
        auth_redirect();
    }

    public static function getInstance() {

        if (null == self::$instance) {
            self::$instance = new self;
        }

        return self::$instance;
    }

}
有了这个选秀课,什么是这个检查最好的动作钩?wp, init, template_redirect ?

用法示例:

add_action(\'wp\', array(Auth::getInstance(), \'checkAuth\'));

UPDATE

我玩了一会儿钩子,我注意到:

当我将其挂接到“wp”或“template\\u redirect”时,我会得到登录页面,但每次登录时都会提示我再次登录,一次又一次。

当我把它挂到“init”时

请求URI过长

请求的URL长度超过了此服务器的容量限制。

问题似乎出在auth\\u redirect()wordpress函数上。

我在Auth类中更改checkAuth函数

if(!is_user_logged_in()) wp_safe_redirect(site_url(\'/wp-login.php\'));
我再次测试了这三个挂钩,现在wp和template\\u重定向工作正常,但init挂钩导致重定向循环错误。

你知道为什么会这样吗?(参考文献:Using `auth_redirect` : keeps asking me to login even when I'm logged in)

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

这是我编写的一个多站点插件的一部分,它强制用户登录。它要求用户注册该站点;不仅仅是一个网络用户。可以对其进行修改,以检查用户是否具有更高的角色。我确实对它进行了修改,以符合OP的要求。

add_action( \'init\', \'registration_check\',5);

function registration_check() {
    if ( is_user_logged_in() ) { return; }
    // if ( current_user_can(\'read\') ) { return; }  // orig for multisite

    // This is a base array of pages that will be EXCLUDED from being blocked
    $exclusions = array(
            \'wp-login.php\',
            \'wp-register.php\',
            \'wp-cron.php\', // Just incase
            \'wp-trackback.php\',
            \'wp-app.php\',
            \'xmlrpc.php\',
            );
    // If the current script name is in the exclusion list, abort
    if ( in_array( basename($_SERVER[\'PHP_SELF\']), $exclusions ) ) {
        return;
    }

    // if ( is_user_logged_in() ) { wp_die(\'<strong>You are logged in but do not have enough privileges to access this site.</strong>\'); } // orig for multisite
    // Still here? Okay, then redirect to the login form
    auth_redirect();
}

结束

相关推荐

The loop does not show users

我想展示所有帖子​​作者。代码作者。php<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php if( get_post_type() == \'post\' ) {?> <?php } if( get_post_type() == \'post-type\' ) {?> <?php } else; endwhile;?>