diff --git a/Config/setting.php b/Config/setting.php index d6453b2..ab9ae6d 100644 --- a/Config/setting.php +++ b/Config/setting.php @@ -13,6 +13,8 @@ // ※ 下記の例は、10分間に5回以上ログイン失敗したらログインを制限する 'LimitCount' => 5, // ログイン失敗の回数 'LimitTime' => 10, // チェックする時間(分) + // チェックをセッションキーではなくユーザーエージェントで判定する場合trueにする + 'user_agent_check' => false, ]; /** diff --git a/Event/BcLimitLoginControllerEventListener.php b/Event/BcLimitLoginControllerEventListener.php index a813868..0fa1200 100644 --- a/Event/BcLimitLoginControllerEventListener.php +++ b/Event/BcLimitLoginControllerEventListener.php @@ -54,13 +54,20 @@ public function usersBeforeLogin(CakeEvent $event) { // ログイン履歴を取得 $limitCount = Configure::read('BcLimitLogin.LimitCount'); $limitTime = (int) Configure::read('BcLimitLogin.LimitTime'); + $conditions = [ + 'key' => $key, //デフォルトはセッションキーで判定 + 'ip_address' => $ipAddress, + 'login_status' => 0, + 'modified >=' => date('Y-m-d H:i:s', strtotime(($limitTime * -1) . ' minutes')), + ]; + // ユーザーエージェントチェック + $userAgent = Configure::read('BcLimitLogin.user_agent_check'); + if (!empty($userAgent)) { + $conditions['user_agent'] = $data['BcLimitLogin']['user_agent']; + unset($conditions['key']); + } $count = $this->BcLimitLogin->find('count', [ - 'conditions' => [ - 'key' => $key, - 'ip_address' => $ipAddress, - 'login_status' => 0, - 'modified >=' => date('Y-m-d H:i:s', strtotime(($limitTime * -1) . ' minutes')), - ], + 'conditions' => $conditions, 'recursive' => -1, 'cache' => false, ]);