if(!is_user_logged_in()) restituisce true nella pagina 404

29 gen 2014, 21:05:18
Visualizzazioni: 16.4K
Voti: 1

Sto gestendo un sito web chiuso accessibile solo agli utenti registrati.

Per fare questo, verifico se l'utente è loggato

// non sono ammessi utenti non autenticati
if( !is_user_logged_in() ) {
    wp_redirect('/wp-login.php');
    //auth_redirect();
    exit;
}

Ma a volte il sistema mi disconnetteva e non riuscivo a capire dove cercare il problema. Si verificava occasionalmente ed era molto difficile da debuggare.

Ora: con una funzione diversa ho scoperto che if( !is_user_logged_in() ) restituisce true nella pagina 404.

Sto ancora facendo debug ma vorrei sentire la tua opinione, è normale o previsto? Potresti confermare se succede lo stesso nella tua installazione? Sto usando l'ultima versione di WordPress


Aggiornamento:

Ancora non capisco, in footer.php

if(!is_user_logged_in()) {
    echo '123';
}

stampa 123 ma la mia funzione non redirige.. comunque è strano e crea problemi con un altro plugin per questo motivo.

Il plugin è così:

add_action("wp_footer","bpln_store_ids");
function bpln_store_ids(){
    if(!is_user_logged_in())
        return;
 ?>
 <div id="bpln-notification-ids" style="display:none;">
 <?php echo join(",",bpln_get_all_notification_ids(bp_loggedin_user_id()));?>
 </div>
<?php
}

Poiché il controllo restituisce true, il contenuto effettivo non verrà mai visualizzato

7
Commenti

Dove stai effettuando il controllo? Puoi effettuare un reindirizzamento solo prima che venga emesso qualsiasi HTML. Se chiami un reindirizzamento dopo che il contenuto ha iniziato a essere inviato, verrà ignorato.

Seamus Leahy Seamus Leahy
29 gen 2014 21:18:59

Uso questo nell'header, prima del doctype. Ma il problema si presenta in footer.php. Ho aggiornato la mia domanda. Questo rimane un problema. Puoi confermare se è lo stesso ovunque? Penso anche che sia un bug

CBeTJlu4ok CBeTJlu4ok
29 gen 2014 21:23:51

Non ho problemi con is_user_logged_in() che restituisce un valore errato nella pagina 404 - nemmeno nel footer. Potresti avere un plugin che modifica lo stato dell'utente corrente. Devi disabilitare i plugin e i temi non predefiniti per determinare se è uno di questi. Se il problema persiste con un'installazione standard di WordPress, allora è un problema di WordPress, altrimenti è legato a un add-on.

Seamus Leahy Seamus Leahy
29 gen 2014 21:42:24

C'è un link che possiamo visitare per vederlo in azione?

eteich eteich
29 gen 2014 21:44:22

Non dovresti usare il redirect nel file header.php, di solito è troppo tardi, gli header sono già stati inviati. Quindi aggancialo prima, ad esempio con l'hook template_redirect.

birgire birgire
29 gen 2014 21:56:20

@birgire Come risposta separata, per favore.

kaiser kaiser
29 gen 2014 22:12:05

@kaiser, grazie per il promemoria - lo so, è una cattiva abitudine suggerire la risposta nei commenti ;-)

birgire birgire
30 gen 2014 02:52:08
Mostra i restanti 2 commenti
Tutte le risposte alla domanda 1
4

Prova questo per il tuo reindirizzamento:

add_action( 'template_redirect', function(){

    // gli utenti non autenticati non sono ammessi
    if( ! is_user_logged_in() )
    {
        wp_redirect( home_url( '/wp-login.php' ), 302 );
        exit();
    }
});

per consentire solo agli utenti loggati di visualizzare il tuo sito.

Di solito è troppo tardi per usare il reindirizzamento direttamente nel file header.php, quindi è meglio usare un hook che viene attivato prima che vengano inviati gli header HTTP, come l'hook template_redirect. È anche importante che template_redirect non sia attivato nella pagina wp-login.php.

30 gen 2014 02:50:54
Commenti

Ecco i voti positivi. Quanto è stato facile? ;)

kaiser kaiser
30 gen 2014 04:31:13

Non lo segnerò come risposta corretta, poiché la domanda è diversa, ma questo è interessante e potrebbe essere un altro mio problema, lo proverò

CBeTJlu4ok CBeTJlu4ok
1 feb 2014 11:05:22

Ok, provato ma non funziona, quando sono disconnesso posso ancora vedere il sito. forse template_redirect è un'azione sbagliata?

CBeTJlu4ok CBeTJlu4ok
1 feb 2014 11:08:48

È strano, l'ho testato con successo su un'installazione pulita. Forse stai usando un plugin/tema che interferisce? Potresti avere problemi con i cookie, hai provato con un altro browser o a svuotare la cache? Puoi provare un hook precedente come wp, ma se vuoi usare hook come init devi modificare il codice sopra per evitare un loop infinito. Qual è l'output di home_url( '/wp-login.php' )? Cosa succede se sostituisci wp_redirect() con die( 'Stop!' )? Hai aggiunto lo snippet di codice nel tuo file functions.php?

birgire birgire
1 feb 2014 18:52:55