forget_login_password


SOY CMSで管理画面にログインできるアカウントのパスワードを忘れたという質問がありましたので、対応方法を記載します。


冒頭のキャプチャでは、パスワードを忘れた場合というパスワードリマインダ機能がありますが、初回設定時にパスワードリマインダの使用の設定を行っていないとこの機能は使用できないので、ログインできるようになったら必ず行って下さい。

パスワードリマインダと不正ログイン対策を有効にする - SOY CMSを使ってみよう


更に事前に下記ページで配布されているパッケージにバージョンアップしておくと、以下の作業が少し楽になります。

https://saitodev.co/soycms/


古いバージョンを利用している自覚があって、それでもバージョンアップしたい場合は下記の記事をご覧ください。

SOY CMSのバージョンアップについて




それでは早速、パスワードなしでログインできるようにします。

この作業を行う場合、無防備となってしまう為、管理画面用のログインフォームのページにBasic認証を設けておくと良いです。


/CMSインストールディレクトリ/common/logic/admin/Administrator/AdministratorLogic.class.php

を開き、下記二箇所を修正します。


27行目付近

function login($userid,$password){
	return true; //←この行を追加
	$dao = SOY2DAOFactory::create("admin.AdministratorDAO");

137行目付近

 function checkUserIdAndPassword($id,$password){
	return true; //←この行を追加
	$dao = SOY2DAOFactory::create("admin.AdministratorDAO");

この2行の追加で、


forget_login_password


ログインIDとパスワードを入力しなくてもログインできるようになります。




forget_login_password1


ログインできたら、画面右上の管理者情報 ()のリンクをクリックしますが、下記の対応を事前に行っておかないとエラーが表示されないので、

/CMSインストールディレクトリ/admin/webapp/pages/Administrator/DetailPage.class.php

の23行目付近を下記のように変更します。

function __construct($arg) {
	$adminID = (isset($arg[0])) ? $arg[0] : null;
	if(!UserInfoUtil::isDefaultUser() || strlen($adminID) < 1) $adminID = UserInfoUtil::getUserId();
	if(is_null($adminID)){
		//データベースから直接取得する 初期管理者は必ず1
		try{
			$adminID = SOY2DAOFactory::create("admin.AdministratorDAO")->getById(1)->getId();
		}catch(Exception $e){
			$adminID = null;
		}
	}

※黒い太字の個所を追加しています。

※上記の修正個所は現在配布中のパッケージでは追加されています。


forget_login_password2


管理者情報のページが開けるようになると、初期管理者のログインID(管理者ID)がわかるようになりますので、ログインIDをメモしておきます。


ログインIDを確認後、赤枠で囲ったパスワード変更のリンクをクリックして、


forget_login_password3


パスワードの変更を行いますが、パスワードの変更を行う為に現在のパスワードの入力が必要になるので、現在のパスワードの入力フォームに設けられているエラーチェックを解除します。


/CMSインストールディレクトリ/common/action/admin/Administrator/ChangePasswordAction.class.php

を開き、15行目付近の

if($form->hasError()){
	foreach($form as $key => $value){
		if($form->isError($key)){
			$this->setErrorMessage($key,$form->getErrorString($key));
		}
	}
	return SOY2Action::FAILED;
}

if($form->hasError()){
	foreach($form as $key => $value){
		if($form->isError($key)){
			$this->setErrorMessage($key,$form->getErrorString($key));
		}
	}
	// return SOY2Action::FAILED;
}

のようにコメントアウトし、


21行目付近を


//パスワードのチェック
if(!$logic->checkUserIdAndPassword($userid,$form->oldPassword)) return SOY2Action::FAILED;

//パスワードのチェック
// if(!$logic->checkUserIdAndPassword($userid,$form->oldPassword)) return SOY2Action::FAILED;
$userid = 1;

チェックに関する処理をコメントアウトし、強制的に初期管理者のIDに書き換えます。


この修正によって、


forget_login_password3


現在のパスワードを空にして初期管理者のパスワードを変更することが出来るようになりました。


最後に、管理画面からログアウトして、今回修正した個所を元に戻すか、使用中のバージョンのSOY CMSを再度サーバに配置するかした後、再度ログインフォームからログインできることを確認します。


ログインできたら、パスワードリマインダの設定は忘れずに

パスワードリマインダと不正ログイン対策を有効にする - SOY CMSを使ってみよう