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