質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

2013閲覧

同じサーバー内の2つのWordpressサイトを同時にログインさせたい

omusoba

総合スコア29

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2016/11/04 11:09

編集2016/11/07 01:55

こんにちは。
現在ローカルで試しているのですが、2つのwordpressのログインをそれぞれのサイトで行うのが面倒なので、片方でログインしたら双方ログイン状態にできないかと思い試験的に作成しています。

【前提】
1、ユーザー管理はプラグイン[wp-members]を使用。
2、プラグイン[wp-members]内の[wp-members-core.php]のlogin()ファンクション内でサインオンの処理が完了した後にAPIでもう片方のサイトにもログイン処理をしておく。
3、ユーザー情報自体は別々のデータベースで管理しているが、まったく同じユーザー情報が入っている(後々同期処理を行う処理を追加予定)
4、ローカルでは現在MANPを使用中

【ファイル構成】
MAMP/htdocs

wordpress1 (localhost:8888/wordpress1)
→wordpressapi
「synchro_login.php」
→wp-admin
→wp-content
→wp-includes .etc.....

wordpress2 (localhost:8888/wordpress2)
→wordpressapi
「synchro_login.php」
→wp-admin
→wp-content
→wp-includes .etc.....

【ログイン処理側】

PHP

1/* localhost:8888/wordpress1/wp-content/plugin/wp-members/wp-members-core.php内 */ 2 3$user = wp_signon( $creds, false ); 4 if( ! is_wp_error( $user ) ) { 5 //サイト間ログイン同期処理追加 6 $another_site = get_option('st_link_url');//localhost:8888/wordpress2/ 7 $url = $another_site."wordpressapi/synchro_login.php"; 8 $data = array('access_token' => $user_token,'userid' => $user->ID,'password' => $user_pass); 9 10 $ch=curl_init(); 11 curl_setopt($ch,CURLOPT_URL,$url); 12 curl_setopt($ch,CURLOPT_POST, TRUE); 13 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 14 curl_setopt($ch,CURLOPT_HEADER,FALSE); 15 curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); 16 curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE); 17 //ユーザーエージェントをIEに偽装する処理 18 curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko'); 19 $result = json_decode(url_exec($ch), false); 20 $rcode = $result->rcode; 21 $error_code = $result->errorcode; 22 curl_close($ch); 23 24 if($rcode){ 25 wp_clear_auth_cookie(); 26 nocache_headers(); 27 return "loginfailed"; 28 } 29 30 //サイト間ログイン同期処理追加 31 } else { 32 return "loginfailed"; 33}

【API側】

PHP

1/* localhost:8888/wordpress1/wordpressapi/synchro_login.php内 */ 2 3header("Access-Control-Allow-Origin: *"); 4require_once('../wp-load.php'); 5 6global $wpdb; 7$result = new stdClass; 8$result->rcode = 0; 9$result->errorcode = 0; 10 11// パラメータ存在チェック 12if (!isset($_POST['userid']) || empty($_POST['userid'])) { 13 $result->rcode = -1; 14 $result->errorcode = 1; 15} 16 17if (!isset($_POST['password']) || empty($_POST['password'])) { 18 $result->rcode = -1; 19 $result->errorcode = 1; 20} 21 22if (!isset($_POST['access_token']) || empty($_POST['access_token'])) { 23 $result->rcode = -1; 24 $result->errorcode = 1; 25} 26 27//アカウント存在チェック分岐 28if (!$result->rcode) { 29 30 $post_ID = $_POST["userid"]; 31 $post_pass = $_POST["password"]; 32 $post_token = $_POST["access_token"]; 33 $rememberme = ( isset( $_POST['rememberme'] ) == 'forever' ) ? true : false; 34 35 $creds = array(); 36 $creds['user_login'] = $post_ID; 37 $creds['user_password'] = $post_pass; 38 $creds['remember'] = $rememberme; 39 40 $user = wp_signon( $creds, false ); 41 42 if( ! is_wp_error( $user ) ) { 43 44 if($contents !== false){ 45 46 wp_set_auth_cookie( $user->ID, $rememberme ); 47 48 }else{ 49 50 $result->rcode = -1; 51 $result->errorcode = 3; 52 53 } 54 55 }else{ 56 57 $result->rcode = -1; 58 $result->errorcode = 4; 59 60 } 61 62 } else { 63 64 $result->rcode = -1; 65 $result->errorcode = 5; 66 67 } 68 69} 70$result_JSON = json_encode($result); 71echo $result_JSON; 72

実際に正常に動かすとAPI側でもTRUEの判定が帰ってきて実際に処理は完了し、ログインまではできます。
ですが、問題はwordpress1のサイトでログインはでき、ログイン後の画面を表示しましたが、wordpress2のサイトへ同じブラウザから移動した場合ログイン状態になっていないのが大きな問題となりました。
API側でサインインできないとTRUE判定にはならないので処理はできているはずです。

一回試しにAPI側でrememberをtureにしてログイン状態の維持ができるかと思いましたが、それもできず。

他に外部サイトからログイン操作してその後に遷移した場合にログイン状態を保存する方法があればお伺いできればと思います。

【追記】
多分原因はサインオンはできていますが、そのサインオンはサーバー上で行われているものであり、ブラウザ以上でログインした事になっていないからではないかなぁと考えられます。
実際そうだとしたらAPIでサインオンを行なった場合、この処理でログイン状態をブラウザで保持することは可能なのでしょうか?

Diawel👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

解決策ではないのですが、まずちゃんとログインできているか確認しませんか?
wordpressのプラグインで、見れるようにするものがいくつかありますので、そちらで確認してみてはどうでしょうか。

Activity log

user login log

Crazy Bone(狂骨)

投稿2016/11/04 17:38

matsu

総合スコア702

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

omusoba

2016/11/05 07:49

回答ありがとうございます。 一通りプラグインの内容を拝見させていただきまして、今回は狂骨をしようしてログインのログをとって確認しました。 それで確認したところ、やはりログインのログに残っていることからサインオン自体の処理には問題はなさそうでした。 本来のwordpressならログアウト処理やログイン時間のタイムアウトしない限り、同じブラウザ内だったらログイン情報はそのまま残っているのに対して、今回はページをそのまま遷移しても別のタブで開いてもログインの扱いが取れていないので、やはりログイン状態の維持の問題が発生しているかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問