バージョン選択

フォーラム

メニュー

オンライン状況

93 人のユーザが現在オンラインです。 (77 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 93
もっと...

サイト内検索

質問 > フロント機能 > ブラックリストユーザのログイン拒否を行いたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
thegifumap
投稿日時: 2018/12/22 14:05
対応状況: 開発中
新米
登録日: 2018/11/3
居住地:
投稿: 8
ブラックリストユーザのログイン拒否を行いたい
EC-CUBE3系です。
dtb_customerテーブルに、ブラックリストのフラグカラム(カラム名:not_pay)を追加し、
拒否フラグが立っているユーザがログインしようとしたときに、
ログイン拒否し、ログイン拒否というエラーメッセージを出したいと
考えています。

Eccube\Controller\Mypage\MypageController.phpのloginメソッドのreturn部分で拒否を作ればいいのかなとイメージしたのですが、


return $app->render('Mypage/login.twig', array(
    'error' => $app['security.last_error']($request),
    'form' => $form->createView(),
));


の$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辺りでしょうか)を利用して
ログインユーザーのブラックリストフラグカラムを判定して、エラーページにリダイレクトさせれば良いかもしれません。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

thegifumap
投稿日時: 2018/12/24 12:55
対応状況: −−−
新米
登録日: 2018/11/3
居住地:
投稿: 8
Re: ブラックリストユーザのログイン拒否を行いたい
ご返信ありがとうございます。

もう少し詳しく教えていただけないでしょうか?

プラグインジェネレータで、front.mypage.mypage.login.initializeを
フックするようにしました。
フックするメソッドは、

public function onFrontMypageMypageLoginInitialize(EventArgs $event){
}

です。

ここに、書けばいいのかなと推測しております。

必要なデータは、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」等。

もしくはフックポイントを利用せずに、各コントローラーのアクションにログイン済みか判定して、
ログインしていたらブラックリストユーザーか判定させる方法が分かりやすいかもしれません。
(同じようなコードと大量に記述する事にはなりますが)
if ($app->isGranted('IS_AUTHENTICATED_FULLY')) {
    //$app->user()でログイン済みの顧客(CustomerEntity)が取れます。
    if ($app->user()->getBlackListFlg() == 1 ) {
        return $app->redirect($app->url('blacklist_error'));
    }
}

※getBlackListFlgやblacklist_errorは適当な値です。
 ご自身で追加したメソッドやルーティングを記載してください。
 エラーページのルーティングは、FrontControllerProvider.phpのshopping_error辺りの記述を参考にすれば良いかと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

thegifumap
投稿日時: 2018/12/25 13:22
対応状況: 解決済
新米
登録日: 2018/11/3
居住地:
投稿: 8
Re: ブラックリストユーザのログイン拒否を行いたい
ありがとうございます、できました!

加えて、ブラックリストを排除するページに、ログアウトボタンを設置し、ログアウトさせることで、対応できました。

本当に感謝しています。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,295名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.