Mon client ne veut pas explicitement utiliser l’option wordpress "multisite".
Mon client a un site principal et 199 sous-sites (autres domaines).
Un utilisateur a usermeta avec la clé méta: branch_id
À titre d'exemple (noms entièrement composés):
Site principal: kero.com
Sous-site: uka.com (et beaucoup d’autres)
Les deux domaines ont des certificats SSL.
L’objectif final est le suivant: Lorsque vous vous connectez au site principal (kero.com). J'ai construit un plugin qui vérifie quel ID de branche est attaché à l'utilisateur. Ça va comme ça:
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 );
Donc, je construis toutes sortes de choses, j'ai utilisé ce lien sur // la magie se passe ici: Cliquez ici.
Cela ne fonctionne pas comme prévu. Cela me permet de rester sur le site principal, mais lorsque je clique sur "magasin", il se trouve dans le sous-site. Quand je vais sur mon compte (où je devrais être connecté), je ne suis plus connecté.
J'ai écrit un autre code:
$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()
)
);
Je ne sais pas vraiment comment utiliser cela pour mon objectif personnel. Je peux faire écho aux résultats, mais puis obtenir un grand nombre d'en-têtes, etc. Et quand je surfe sur le sous-site: je ne suis pas connecté ... Il ne conserve donc pas de sessions/cookies.
TBH: Je suis vraiment un débutant sur toute la session/cookie/sécurité. La plupart du temps, j'utilise Wordpress ou Laravel et la plupart des problèmes de sécurité sont déjà gérés.
Merci à tous ceux qui prennent le temps de lire ceci.
UPDATE: ajout d'un code supplémentaire!
Pour référence future, je réponds à ma propre question. Clause de non-responsabilité: Il s’agissait d’un travail indépendant et devait être fait dans un laps de temps X. Ce qui signifie que c'était l'option la plus rapide ET la plus simple.
Ce que j'ai fait était:
Puis fait écho
echo "<script>setTimeout(function() { parent.self.location='https://server.com'; }, 1500);</script>";
Vous ne pouvez pas définir de cookies sur le site A qui s’appliqueront sur le site B; votre système de "connexion par proxy" ne fonctionnera donc pas et ne pourra pas fonctionner. De plus, stocker des mots de passe en texte brut est un gros no-no.
Je pense qu'il serait possible de le faire en toute sécurité en faisant quelque chose comme ceci:
src
défini sur le sous-site, avec le code temporaire (et le nom d'utilisateur) envoyé dans la chaîne de requête. (Vous pouvez également rediriger vers le sous-site avec la même URL.)En fin de compte, le cookie de connexion est défini dans le navigateur du client pour le sous-site souhaité. :-)