Mein Kunde möchte ausdrücklich nicht die WordPress-Option "Multisite" verwenden.
Mein Kunde hat eine Hauptwebsite und 199 Unterwebsites (andere Domains).
Ein Benutzer hat eine Benutzerkennung mit dem Metaschlüssel: branch_id
Als Beispiel (komplett erfundene Namen):
Hauptseite: kero.com
Sub-Site: uka.com (und viele andere)
Beide Domänen haben SSL-Zertifikate.
Das Endziel lautet wie folgt: Wenn Sie sich auf der Hauptseite (kero.com) anmelden. Ich habe ein Plugin erstellt, das überprüft, welche Filial-ID dem Benutzer zugeordnet ist. Es geht so:
function myplugin_auth_signon( $username, $password ) {
$user = get_user_by('email', $username);
$user_id = $user->ID;
$key = 'branch_id';
$single = true;
$branch = get_user_meta( $user_id, $key, $single );
if($branch == 'number') {
//magic happens here!
$cookie = "cookie.txt";
$postdata = "log=" . $username . "&pwd=" . $password . "&wp-submit=Log%20In&redirect_to=" . $url . "wp-admin/&testcookie=1";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url . "wp-login.php");
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt ($ch, CURLOPT_REFERER, $url . "wp-login.php");
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
curl_close($ch);
//This is from the answer of the link. On the end url the users get redirected from wp-admin to my-account
header('location: ' . $url . 'wp-admin/');
die();
//after logging in redirect the user to uka.com/my-account
}
add_action( 'wp_authenticate', 'myplugin_auth_signon', 30, 2 );
Also baue ich alle möglichen Sachen, ich benutze diesen Link auf der // Magie passiert hier: Klicken Sie hier.
Es funktioniert nicht wie beabsichtigt. Es hält mich auf der Hauptwebsite, aber wenn ich auf "Speichern" klicke, befindet es sich auf der Unterwebsite. Wenn ich zu meinem Konto gehe (wo ich angemeldet sein sollte), bin ich nicht mehr angemeldet.
Ich habe einen anderen Code geschrieben:
$response = wp_remote_post( $url, array(
'method' => 'POST',
'timeout' => 45,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'headers' => array(),
'body' => array(
'username' => $username,
'password' => $password
),
'cookies' => array()
)
);
Ich weiß nicht wirklich, wie ich das für mein persönliches Ziel verwenden soll. Ich kann die Ergebnisse wiedergeben, bekomme dann aber eine große Auswahl an Headern usw. Und wenn ich zur Unterwebsite surfe: Ich bin nicht angemeldet ... Es werden also keine Sitzungen/Cookies gespeichert.
TBH: Ich bin wirklich ein Anfänger in Sachen Session/Cookie/Sicherheit. Die meiste Zeit baue ich in Wordpress oder Laravel und das meiste Sicherheitsmaterial ist dann schon erledigt.
Vielen Dank an alle, die sich die Zeit nehmen, dies zu lesen.
UPDATE: Zusätzlicher Code hinzugefügt!
Zum späteren Nachschlagen beantworte ich meine eigene Frage. Haftungsausschluss: Dies war ein freiberuflicher Auftritt und musste in einem X-Zeitrahmen durchgeführt werden. Was bedeutet, dass dies die schnellste und einfachste Option war.
Was ich getan habe war:
Dann echo'd
echo "<script>setTimeout(function() { parent.self.location='https://server.com'; }, 1500);</script>";
Sie können keine Cookies für Site A festlegen, die für Site B gelten. Daher funktioniert Ihr Schema "Anmeldung über Proxy" nicht und funktioniert nicht. Darüber hinaus ist das Speichern von Passwörtern im Klartext nur ein großes Nein-Nein.
Ich denke, es wäre möglich , es sicher zu machen, indem man so etwas macht:
src
auf die Unterwebsite gesetzt ist und der temporäre Code (und Benutzername) im Querystring gesendet werden. (Alternativ können Sie auch einfach mit derselben URL zur Unterwebsite umleiten.)Als Ergebnis wird das Anmelde-Cookie im Browser des Clients für die Unterwebsite wie gewünscht festgelegt. :-)