web-dev-qa-db-ger.com

Verwenden von "auth_redirect": Fordert mich immer wieder auf, mich anzumelden, auch wenn ich angemeldet bin

Ich versuche, auth_redirect zu verwenden, um nicht angemeldete Besucher beim Besuch einer bestimmten Seite automatisch umzuleiten. Hier ist der Code, den ich benutze:

add_action('template_redirect','wpse16975_check_if_logged_in');
function wpse16975_check_if_logged_in(){
    $pageid = 29;
    if(is_page($pageid)) auth_redirect();
}

Die Umleitung funktioniert (ich sehe die Anmeldeseite), aber wenn ich mich anmelde, sehe ich die Anmeldeseite wieder. Es gibt keine Möglichkeit, auf die geschützte Seite zuzugreifen, da der Browser sie weiterhin auf die Anmeldeseite umleitet.

Ich habe diese Frage und ihre Antwort von @chrisguitarguy gesehen und meinen Code dahingehend geändert:

add_action('template_redirect','wpse16975_check_if_logged_in');
function wpse16975_check_if_logged_in(){
    $pageid = 29;
    if(!is_user_logged_in() && is_page($pageid)) {
    $url = add_query_arg(
        'redirect_to',
        get_permalink($pageid),
        site_url('wp-login.php')
    );
    wp_redirect($url);
    exit;
}

Dieser Code hat mein Problem gelöst: Ein angemeldeter Benutzer kann jetzt auf die Seite zugreifen. Die Frage ist: Warum kann man auth_redirect nicht einfach verwenden?

3

Das Problem ist, dass diese Funktion normalerweise im Backend verwendet wird. Um es im Frontend zu verwenden, müssen Sie den folgenden Filter hinzufügen:

add_filter( 'auth_redirect_scheme', 'wpse16975_check_loggedin' );
function wpse16975_check_loggedin(){
    return 'logged_in';
}

Dann funktioniert auth_redirect() wie erwartet: Leiten Sie Benutzer zum Anmeldeformular weiter, wenn sie nicht angemeldet sind.

3

Das Problem war, dass Sie sich selbst in eine Schleife steckten. Ihr ursprünglicher Codeblock hat angegeben, dass Sie mich zur Anmeldeseite senden, wenn ich diese Seite besuche. Nachdem Sie sich angemeldet haben, kehrte es zu der Seite zurück, die Sie, seitdem Sie die Seite besuchen, auf der Anmeldeseite aufrufen. Rund und rund gehts!

Der neue Block prüft zunächst, ob Sie angemeldet sind oder nicht. Wenn nicht, dann und nur dann sieht es danach, welche Seite Sie besuchen. Wenn Sie nicht eingeloggt sind, werden Sie dorthin geschickt und nach dem Einloggen zurückgeschickt. Jetzt, da Sie angemeldet sind, sehen Sie die Seite.

Sinn ergeben?

0
G H

Habe Probleme mit auth_redirect () nur auf dem Handy.

Nach vier Tagen habe ich eine Lösung geschrieben, die funktioniert und auth_redirect nicht benötigt.

global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );
if( !is_user_logged_in() ) { wp_redirect( home_url() . '/wp-login.php?redirect_to='. $current_url );
0
RyanPaul.ca