WordPressに自動ログインさせる

WordPressに自動ログインさせる

目次

初めに
設定したい内容
functions.phpの編集
失敗した原因と修正
ログインできない場合の対処
最後に

初めに

複数のサイトを運営していて、サイトを遷移する度にIDとパスワードを入力する手間を省略したいと思い、今回は他サイトからWordPressサイトへアクセスした際に、POSTを利用し自動ログインを行おうと思います。
ログインする際のユーザーは、アクセス元のユーザー権限に合わせて条件分岐させます。
※今回の自動ログイン設定は、cookieを利用した方法となっております。パスワードが無くてもログイン出来てしまうので、セキュリティには十分に注意してください。

設定したい内容

・他サイトからアクセスした際にPOST情報を受け取り、Wordpressへ自動ログインさせる。
※GETメソッドでも設定可能ですが、URLにパラメータを表示させないためにPOSTメソッドを利用しています。
・他サイトのID情報によって、Wordpressへログインした際の権限(管理者、編集者など)を分岐させる。

functions.phpの編集

自動ログインを行いたいサイトのテーマエディタからphpファイルの編集を行い設定を変更していきます。
まずはWordpressへログインし左サイドメニューの「外観」から「テーマエディタ」を開きます。

左サイドメニュー

テーマエディタ画面の右側にある「テーマのための関数 functions.php」を開きます。
※編集するテーマが「child」になっている事を確認してください。
 元テーマを編集するとテーマ更新の際に設定した内容が消えてしまうので注意してください。

テーマとテーマファイルの選択

functions.phpのファイル内容が表示されたら、下部へ今回の内容を追加していきます。
POST情報があるか否かを判断して、情報が正しければ自動ログインするように記載していきます。
記載後は「ファイルの更新」ボタンをクリックし、ファイルを保存します。
※コードが間違っているとエラーになり更新されませんので注意してください。

テーマファイルへ追記

今回は遷移元サイトのリクエスト処理は割愛しますが、以下の2点を想定しています。
 ・自動ログインさせたいサイトへ遷移させるボタンを遷移元サイトに用意する。 
  ボタンをクリックすると、POSTで権限情報を送る。
 ・付与する情報は管理者なら’admin’、編集者なら’editor’です。

自動ログインに関するコードはこちらの記事を参考にさせていただきました。
実際に記載したコードは以下の通りです。

//自動ログイン
add_action('login_form','wp_auto_login');
function wp_auto_login(){
	wp_clear_auth_cookie(); //1.cookie情報を削除

	if(isset($_POST["postdata"])){
		$uid = $_POST["postdata"]; 
		if($uid == "admin"){ //2.権限による分岐
			$udata = get_user_by('login','管理ユーザーID'); //3.該当するユーザーID
		      wp_set_current_user($udata->ID);
		      wp_set_auth_cookie($udata->ID, true);
		}
         
		if($uid == "editor"){
			$udata = get_user_by('login','編集ユーザーID');//3.該当するユーザーID
		      wp_set_current_user($udata->ID);
		      wp_set_auth_cookie($udata->ID, true);
		}
		wp_safe_redirect('サイトURL', 302 ); //POST情報が無い場合は通常サイトへ移動
	}
}

1.前回のcookie情報が残っているとログインに失敗するため、初めにcookie情報を削除しています。
2.POST情報によってログインするユーザーを管理権限、編集権限で分岐させています。
 分岐を5つほどまで増やしても問題なく動きました。
3.’管理ユーザーID’、’編集ユーザID’の部分にはログインするWordpressサイトに存在するユーザーIDを記載ください。

この内容だけだとエラーとなり失敗してしましました。
原因は次項で説明いたします。

※注意!!
自動ログインを試す際、失敗すると「失敗→自動ログイン→失敗」の無限ループに陥る事がありますので十分ご注意ください。
ログインできなくなった場合の対処は、「ログインできなくなった場合の対処」で軽く説明いたします。

失敗した原因と修正

エラーとなった原因は、POSTを受け取るパラメータが存在しない事でした。
「//自動ログイン」の前に下記コードを追加する事で解決しました。

//POSTを受け取るパラメータの追加
add_filter('query_vars', 'set_org_query_vars');
function set_org_query_vars( $query_vars ) {
	$query_vars[] = 'authdata';// 独自パラメータを配列最後尾に追加する。
	return $query_vars;
}

ログインできない場合の対処

ログインできない状態となってしまった場合は、サーバーへSSH接続を行いfunctions.phpを直接修正する事で対処できます。
私は「Tera Term」を利用しました。
TeraTermを立ち上げ、サーバーのIPアドレスを「ホスト(T)」へ入力し、ユーザー名とパスワードを入力し接続します。

Tera Termの接続画面

よく見る白黒の画面にて、functions.phpを探しだしファイルを開き修正します。
操作コマンドに関しては今回は触れませんので、「コマンド 操作」などで検索してください。

操作画面

最後に

冒頭でも記載しましたが、今回の自動ログインはパスワードが無くてもログインが可能な方法になっております、不正ログイン等セキュリティには十分にご注意ください。
また、ログインを試す際は失敗するとサイトに入れないという悲惨な事になりかねませんので、重ねてご注意ください。
この記事がどなたかのお役に立てれば幸いです。