質問 > フロント機能 > ブラックリストユーザのログイン拒否を行いたい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
thegifumap |
投稿日時: 2018/12/22 14:05
対応状況: 開発中
|
新米 登録日: 2018/11/3 居住地: 投稿: 8 |
ブラックリストユーザのログイン拒否を行いたい EC-CUBE3系です。
dtb_customerテーブルに、ブラックリストのフラグカラム(カラム名:not_pay)を追加し、 拒否フラグが立っているユーザがログインしようとしたときに、 ログイン拒否し、ログイン拒否というエラーメッセージを出したいと 考えています。 Eccube\Controller\Mypage\MypageController.phpのloginメソッドのreturn部分で拒否を作ればいいのかなとイメージしたのですが、
の$appや、その前の$formをどう触ればいいのか、どうオリジナルメッセージを返すのか(security.last_errorはsymfony2のデフォルトメッセージですよね?)で詰まっています。 お力添えいただければ幸いです。 |
468 |
投稿日時: 2018/12/24 10:28
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: ブラックリストユーザのログイン拒否を行いたい /src/Eccube/Controller/Mypage/MypageController.phpのloginメソッドは、
ログイン画面を表示する処理かと思いますので、 (ログイン前の状態の処理) ログインユーザーのブラックリストフラグカラムの内容を判定できないのではないでしょうか? 認証関連の処理は、symfony2のsecurityコンポーネントに任せていると思いますので、 認証に関するロジックを変更するのは大変なのではないかと思います。 (変にいじって脆弱性を生み出してしまうかもしれません) ログイン成功時のイベントに /src/Eccube/EventListener/SecurityEventListener.php function onInteractiveLogin() が呼び出されるようにセットされていますので、 ここでブラックリストフラグカラムを判定してログインを拒否すれば良いのではないでしょうか? (具体的なログイン拒否の実装方法が分からないですが) もしくはプラグインのフックポイント(onControllerAfter辺りでしょうか)を利用して ログインユーザーのブラックリストフラグカラムを判定して、エラーページにリダイレクトさせれば良いかもしれません。
|
thegifumap |
投稿日時: 2018/12/24 12:55
対応状況: −−−
|
新米 登録日: 2018/11/3 居住地: 投稿: 8 |
Re: ブラックリストユーザのログイン拒否を行いたい ご返信ありがとうございます。
もう少し詳しく教えていただけないでしょうか? プラグインジェネレータで、front.mypage.mypage.login.initializeを フックするようにしました。 フックするメソッドは、
です。 ここに、書けばいいのかなと推測しております。 必要なデータは、dtb_customorテーブル内の1フラグです(カラム名:not_pay, Entity:notPay)。 $eventから、どうやって、ユーザIDを拾ってきて、このカラムに参照するのか、 また、どうやって別ページに飛ばすのか、 大変申し訳ありませんが、ご教授いただけないでしょうか? 初心者レベルの質問で申し訳ありませんが何卒よろしくお願いいたします。 |
468 |
投稿日時: 2018/12/25 10:45
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: ブラックリストユーザのログイン拒否を行いたい 該当の箇所は、未ログイン時にログイン画面を表示する処理となりますので、
提示いただいたフックポイントでは目的の挙動を実装する事は出来ないのではないかと思います。 (function login()はログイン処理ではありません。 ログイン処理自体はECCUBE内には存在せず、symfony2側に任せています) フックポイントについては、コントローラー内に設定されているローカルフックポイントでは無く、 もう少し大きな範囲で設定されているフックポイント(スーパーフックポイントと呼ぶのでしょうか?)を利用する形になるのではないかと思います。 例えば、「eccube.event.front.controller」等。 もしくはフックポイントを利用せずに、各コントローラーのアクションにログイン済みか判定して、 ログインしていたらブラックリストユーザーか判定させる方法が分かりやすいかもしれません。 (同じようなコードと大量に記述する事にはなりますが)
※getBlackListFlgやblacklist_errorは適当な値です。 ご自身で追加したメソッドやルーティングを記載してください。 エラーページのルーティングは、FrontControllerProvider.phpのshopping_error辺りの記述を参考にすれば良いかと思います。
|
thegifumap |
投稿日時: 2018/12/25 13:22
対応状況: 解決済
|
新米 登録日: 2018/11/3 居住地: 投稿: 8 |
Re: ブラックリストユーザのログイン拒否を行いたい ありがとうございます、できました!
加えて、ブラックリストを排除するページに、ログアウトボタンを設置し、ログアウトさせることで、対応できました。 本当に感謝しています。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |