it-swarm.com.de

Abmelden über Subdomain, Nicht-WordPress-Seite auf einem anderen Server?

Ähnlich wie bei der Frage um Holen Sie sich die Funktion wp_logout_url, um auf einer externen (nicht-Wordpress) Seite zu arbeiten

Das Problem, mit dem ich konfrontiert bin, ist die Tatsache, dass sich die Unterdomäne auf einem anderen Server befindet, sodass ich die wp-blog-header.php -Datei nicht einfügen/anfordern kann.

Gibt es eine Möglichkeit, Domains auf die Whitelist zu setzen, die das sofortige Abmelden ermöglichen, so wie Sie es für die Whitelist umleiten können .

Wenn nicht, wie kann ich zulassen, dass Unterdomänen (mit SQL-Remotezugriff) einen gültigen Abmeldelink erstellen, der die Meldung "Möchten Sie sich wirklich abmelden?" Umgeht.

Re: @SatbirKira

Gleicht dies einer logischen Umgehung, um sicherzustellen, dass die Abmeldung bis zu einem gewissen Grad "gültig" ist:

  • Legen Sie die Abmelde-URL alle 24 Stunden fest, damit eine Abfragezeichenfolge mit einer zufälligen Zeichenfolge angehängt wird. Beispiel: http://website.com/custom_logout.php?confirm=sj239ks, gefolgt von http://website.com/custom_logout.php?confirm=32k9la3

Bei jeder Änderung wird eine bestimmte Datei (custom_logout.php auf dem anderen Server OR eine txt/ini-Datei auf einem eigenen Server OR einem anderen Server) bearbeitet und ein Array/eine Liste erstellt von Streichern

$confirmkeys = array("sj239ks", "32k9la3");

oder

[confirmkeys]
confirm[] = sj239ks
confirm[] = 32k9la3

Die Datei enthält immer nur 2 Bestätigungsschlüssel, einen für vor 24 Stunden (nur für den Fall, dass jemand die Seite noch geöffnet hat) und einen für die aktuellen 24 Stunden.

Ich schätze, dasselbe könnte einzeln und nicht global gemacht werden, aber gibt es viel Bedarf dafür?

  • Bearbeiten Sie den custom_logout.php, um zu prüfen, ob der $_SERVER['HTTP_REFERER'] von derselben Domain (allen Subdomains) stammt. Wenn dies der Fall ist, setzen Sie matching_referer auf true. Wenn nicht, setzen Sie die Variable auf false.

  • Bearbeiten Sie custom_logout.php, um eine Prüfung hinzuzufügen, um festzustellen, ob die Abfragezeichenfolge mit einer in einer bestimmten Datei gespeicherten übereinstimmt. (Am einfachsten mit einer txt/ini-Datei auf dem sekundären Server?) Wenn sie übereinstimmt, setzen Sie matching_confirm auf true. Wenn nicht, setzen Sie die Variable auf false.

  • custom_logout.php editieren und es so lange machen, bis eine (eine) der Prüfungen wahr ist, um sich sauber abzumelden, wenn beide mit der Warnung falsch abgemeldet sind, indem sie an die Seite /wp-login.php?action=logout gesendet werden?

2
Ryflex

Sie können eine Datei mit dem Namen custom_logout.php erstellen und im Stammverzeichnis von WordPress ablegen. Das beinhaltet

<?php 
     require_once("wp-load.php"); //load wordpress
     wp_logout(); //logout
     exit(); //end page
?>

Öffnen Sie dann in Ihrer Subdomain-Site die URL mit einem Anker-Tag

<a href="http://youwebsite.com/custom_logout.php">Logout</a>

Eine Whitelist kann nicht einfach erstellt werden, da überprüft werden muss, woher der Benutzer kommt, indem $ _SERVER ['HTTP_REFERER'] verwendet wird, was unzuverlässig ist (normalerweise null). Dafür gibt es leider keine einfache Lösung.

Auf deine Bearbeitung antworten

Es steht Ihnen völlig frei, den Ansatz des temporären Schlüssels zu implementieren, wenn dies ein verantwortungsvoller Kompromiss ist. Anstelle von zwei zufälligen Schlüsseln können Sie jedoch einen MD5-Hash des aktuellen Tages senden. Verwenden Sie auf beiden Servern ein identisches geheimes Salz. Jetzt können Sie einfach den gestrigen Hash und den aktuellen Tag in custom_logout.php neu berechnen und mit der eingehenden get-Variablen vergleichen. Es ist keine txt/ini-Datei mehr erforderlich.

1
Satbir Kira

Angenommen, Sie sind der Administrator beider Sites ...

Füge den Admin-Ajax-Handler zu deiner Haupt-WP-Site hinzu ...

add_action( 'wp_ajax_logout', 'my_logout_callback' );
function my_logout_callback() {
    wp_logout(); // Log out
    header('Location: http://www.example.com/successfully-logged-out');// Maybe redirect user somewhere?
    wp_die();
}

Verlinken Sie in Ihrer Subdomain-Site auf den Ajax-Handler des Administrators der Hauptseite ...

<a href='//example.com/wp-admin/admin-ajax.php?action=logout'>Logout</a>
2
shramee