私のクライアントは、明示的に「マルチサイト」のワードプレスオプションを使用したくありません。
私のクライアントにはメインサイトと199のサブサイト(他のドメイン)があります。
ユーザーは、メタキーがusermetaで、branch_idです。
例として(完全に名前を作った):
メインサイト:kero.com
サブサイト:uka.com(およびその他多数)
どちらのドメインにもSSL証明書があります。
最終目標は次のとおりです。メインサイト(kero.com)にログインしたとき。どのブランチIDがユーザーに割り当てられているかをチェックするプラグインを作成しました。こんなふうになります:
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 );
それで私はあらゆる種類のものを構築します、私は//ここで起こる魔法でこのリンクを使いました: ここをクリックしてください。
意図したとおりには機能しません。メインのWebサイトには表示されますが、[store]をクリックするとサブサイトに表示されます。私のアカウント(私がログインしているはずの場所)に行くと、もうログインしていません。
私は他のコードを書きました:
$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()
)
);
私は個人的な目的のためにこれを使用する方法を本当に知りません。結果をエコーすることはできますが、大量のヘッダーなどを取得することができます。サブサイトにアクセスすると、ログインしていません。
TBH:私は本当にセッション全体、クッキー、セキュリティに関して初心者です。ほとんどの場合、私はWordpressまたはLaravelで構築していますが、ほとんどのセキュリティ関連要素はすでに処理されています。
これを読むのに時間をかけている皆に感謝します。
更新:追加のcUrlコードを追加しました!
今後の参考のために、私は自分の質問に答えています。免責事項:これはフリーランスのギグであり、Xタイムフレームで行われなければなりませんでした。これは、これが最も早くかつ最も単純なオプションであることを意味します。
私がしたことは、
それからエコーした
echo "<script>setTimeout(function() { parent.self.location='https://server.com'; }, 1500);</script>";
サイトBに適用されるサイトAからのCookieの設定はできません。そのため、「プロキシによるログイン」スキームは機能せず、機能させることもできません。さらに、パスワードをプレーンテキストで保存することは、単なる大きな不可能です。
私はそれが 可能である このような何かをすることによってそれを安全にすることになると思います:
src
をサブサイトに設定し、一時コード(およびユーザー名)をクエリ文字列で送信します。 (あるいは、同じURLでサブサイトにリダイレクトするだけです。)結果として、ログインCookieはサブサイトのクライアントのブラウザに必要に応じて設定されます。 :-)