Labo

EC-CUBE3 分室

【3.0.15】管理者パスワードを忘れた時に管理画面にログインする方法(2)

2017年11月19日 / 投稿者名:chiharu


今回は前回の記事にて管理者パスワードを忘れた場合の記事を記載しました。
その際に管理者パスワードの変更が出来ませんでした。
今回はパスワードが変更できるように確認してみたいと思います。
 
まぁ、大前提として前回行った以下の変更を行っておいてください。
 <インストールフォルダ>/src/Eccube/Application.php

        $this['security.access_rules'] = array(
            array("^/{$this['config']['admin_route']}/login", 'IS_AUTHENTICATED_ANONYMOUSLY', $channel),
//            array("^/{$this['config']['admin_route']}/", 'ROLE_ADMIN', $channel),
            array('^/mypage/login', 'IS_AUTHENTICATED_ANONYMOUSLY', $channel),
            array('^/mypage/withdraw_complete', 'IS_AUTHENTICATED_ANONYMOUSLY', $channel),
            array('^/mypage/change', 'IS_AUTHENTICATED_FULLY', $channel),
            array('^/mypage', 'ROLE_USER', $channel),
        );

 
さて、前回の問題は管理画面にはログイン出来るけど管理者情報の変更はできませんでした。
発生する内容としてはシステムエラーです。
まぁ、簡単に言うと管理者としてログインんしていない為、管理者IDが誰か解りませんと云うことですね。
それでは見てみましょう。
 
 ・
 ・
 ・
 
と云うことで解決できそうです。
以下の変更を加えれば対応が可能なようです。
なお、今回も対応後は修正内容を元に戻すことは忘れないでください。
 
対象は以下のファイルになります。
 <インストールフォルダ>/src/Eccube/Controller/Admin/Setting/System/MemberController.php
 
上記のファイルの「edit」ファンクションを確認してください。
76行目辺りに以下の記載があります。
ここを変更する形となります。

        $LoginMember = clone $app->user();
        $app['orm.em']->detach($LoginMember);

 
 ↓ 以下のように変更して下さい。
 

//        $LoginMember = clone $app->user();
        $LoginMember = new \Eccube\Entity\Member();
        $app['orm.em']->detach($LoginMember);

 
変更内容は簡単な話です。
本来はログインしているユーザーが変更したと云う情報を保存する機能があるため、ログインユーザーを取得しています。
しかしながら今回は通常のログインをしていません。
その為ログインユーザーが取得できないためエラーとなります。
 
今回は以下の形でユーザーの初期データをログインユーザーとて適用する形に変更しています。

        $LoginMember = new \Eccube\Entity\Member();

 
これで誰が管理者情報を変更したかは不明となりますが正常なルートを使用して管理者のパスワード変更を実行できます。
変更が完了した後は変更したパスワードにてログイン出来るか改めて確認してください。
ログイン出来た後は今回の変更内容を元に戻した後、正常なログインをした上でパスワードを再変更しておけば万全かと思います。
 
 
なお、上記対応は自己責任にて行てください。
また、悪用することなく最終手段として対応するようにしてください。
もしも悪用した/されたで問題が発生しても当ブログでは責任を負えません(笑)
 
と云うことで今回はここまでとさせて頂きます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。