web-dev-qa-db-fra.com

Middleware d'authentification Wordpress

Ce que je veux réaliser, c'est:

Pour chaque demande, si l'utilisateur n'est pas connecté, il sera redirigé vers la page de connexion. Si l'utilisateur est connecté, il peut accéder au site.

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

}

Ayant ce brouillon, quel est le meilleur crochet d’action pour cette vérification? wp, init, template_redirect?

Exemple d'utilisation:

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

UPDATE

J'ai un peu joué avec les crochets et j'ai remarqué que:

Lorsque je le raccorde à 'wp' ou à 'template_redirect', la page de connexion s'affiche, mais chaque fois que je me connecte, demandez-moi de me connecter à nouveau, puis encore et encore.

Quand je l'accroche à 'init', je reçois un

Request-URI Trop Long

La longueur de l'URL demandée dépasse la limite de capacité de ce serveur.

Le problème semble être avec la fonction auth_redirect () wordpress.

Je change ma fonction checkAuth dans la classe Auth avec

if(!is_user_logged_in()) wp_safe_redirect(site_url('/wp-login.php'));

J'ai testé à nouveau les trois points d'ancrage et maintenant, wp et template_redirect fonctionnent correctement, mais le point d'accrochage init provoque une erreur de boucle de redirection.

Des idées pourquoi cela se produit-il? (Référence: Utiliser `auth_redirect`: continue de me demander de me connecter même lorsque je suis connecté )

1
Laxmana

Voici une partie d'un plugin multisite que j'ai écrit qui oblige un utilisateur à se connecter. Il a fallu qu'un utilisateur soit enregistré pour le site; pas seulement être un utilisateur du réseau. Il pourrait être modifié pour vérifier si l'utilisateur a un rôle plus important. Je l'ai modifié pour répondre aux exigences du PO.

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();
}
3
user42826