Meu cliente explicitamente não quer usar a opção wordpress 'multisite'.
Meu cliente tem um site principal e 199 sub sites (outros domínios).
Um usuário possui usermeta com meta key: branch_id
Como exemplo (nomes completamente inventados):
Site principal: kero.com
Subsite: uka.com (e muitos outros)
Ambos os domínios possuem certificados SSL.
O objetivo final é o seguinte:
Quando você entra no site principal (kero.com). Eu construí um plugin que verifica qual ID de filial está anexado ao usuário. É assim:
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 );
Então eu construo todo tipo de coisa, eu usei este link na // mágica acontece aqui:
Clique aqui.
Não funciona como desejado. Isso me mantém no site principal, mas quando clico em 'store' é no subsite. Quando eu vou para a minha conta (onde eu deveria estar logado) eu não estou mais logado.
Eu escrevi outro código:
$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()
)
);
Eu realmente não sei como usar isso para meu objetivo pessoal. Eu posso ecoar os resultados, mas depois obter uma grande variedade de cabeçalhos etc. E quando eu navego para o subsite: Eu não estou logado ... Então ele simplesmente não mantém sessões / cookies.
TBH: Eu sou realmente um iniciante em toda a sessão / cookie / segurança. A maior parte do tempo eu construo no Wordpress ou no Laravel e a maioria das coisas de segurança já são tratadas.
Obrigado a todos que estão dedicando tempo para ler isso.
UPDATE: Adicionado código extra da cUrl!