защитить форму bxsender от спам подписок

на сайте стоит форма подписки через модуль bxsender
на него часто стали подписываться спам роботы с несуществующими ящиками, в результате приходят письма о недоставленных письмах а эти ящики
хотелось бы как то перекрыть этот канал )

может невидимая рекапча, может еще есть какие то способы скрыть от роботов эту форму

в формах Formit стоит обычная рекапча2 и она отлично справляется со своей задачей а вот bxsender форму защитить не знаю как
Евгений
11 января 2021, 21:33
modx.pro
1
141
0

Комментарии: 19

Артур
11 января 2021, 21:50
0
Позвольте полюбопытствовать, почему не пишите в техподдержку это же платное дополнение?
    Евгений
    11 января 2021, 21:57
    0
    утолю ваше любопытство — написали но там не факт что дождешься ответа :)
      Артур
      11 января 2021, 21:59
      0
      Спасибо, я вас тоже порадую, обязательно будет ответ:-)
        Евгений
        11 января 2021, 22:09
        0
        Очень надеюсь что он будет полезным, а то это крайне редко происходит :)
          Артур
          11 января 2021, 22:29
          +1
          Если найдёте ответ, то напишите ваше решение сюда, мне вот стало интересно, потому как в документации информации об этом я не нашёл, а вариант делать проверку на js… можно конечно, но как-то не нравится.
            Евгений
            16 января 2021, 17:17
            0
            да уже почти вроде нашел способ но от автора пакета нет обратной связи до сих пор
            по идее в форму можно вставить пустое поле невидимое которое роботы заполняют и проводить валидацию на предмет заполнения
            только вот в пакете как я понимаю нет валидации как в formit
              Артур
              16 января 2021, 19:28
              +1
              Ну можно попробовать приладить AjaxForm, я через два него делал авторизацию, это немного другое но попробовать можно.
                Евгений
                16 января 2021, 22:44
                0
                ну тут не авторизация по сути а просто отправка ящика по нажатию кнопки
                как такое провернуть? ajaxfrom вызвать чанк а в нем bxsender получается так чтоли? :)
                  Артур
                  16 января 2021, 22:58
                  +1
                  Ну да, вызвать сначала FormIt, если валидация прошла, то bxsender. AjaxForm он же просто форму отправляет. Завтра скину свой скрипт для регистрации, там понятно всё станет.
                    Евгений
                    17 января 2021, 01:44
                    0
                    а ну да, мне получается в формит bxsender завернуть :)
                      Артур
                      18 января 2021, 11:41
                      0
                      Сорри вчера весь день без интернета был, не смог код отправить, делаю это сегодня.
                      Это вызов
                      {'!AjaxForm' | snippet:[
                                  'snippet' =>'custRegister'
                                  'form' =>'@FILE chunks/forms/regForm.html'
                                  'activationEmailTpl' =>'custActivateEmailTpl'
                                  'activationResourceId' => '30'
                                  'activationEmailSubject' =>'Подтверждение регистрации'
                                  'usergroups' =>'1'
                                  'usernameField' =>'email'
                                  'passwordField' =>'password'
                                  'validate'=>'nospam:blank,
                                  password:required:minLength=^8^,
                                  password_confirm:password_confirm=^password^,
                                  fullname:required:minLength=^2^,
                                  acceptRules2:required,
                                  usergroups:required,
                                  email:required:email',
                                  'placeholderPrefix' =>'reg.'
                                  ]}
                      А это сниппет custRegister
                      <?php
                      $scriptProperties = array_merge($scriptProperties, $_POST); // вот тут FormIt проверяет поля
                      $result = $modx->runSnippet('Register', $scriptProperties);
                      
                      foreach($modx->placeholders as $key => $ph){
                          if(strpos($key, $scriptProperties[placeholderPrefix].'error.') === 0){
                              $placeholders[$key] = $ph;
                          } 
                      }
                      
                      if(count($placeholders)){
                          return $AjaxForm->error('В форме содержатся ошибки', array('error' => $placeholders));
                      } else {
                          switch($_POST['usergroup']){
                              
                              // franchisee
                              case '3':
                                  $listId = '106';
                                  break;
                              
                               // franchiser    
                              case '2':
                                  $listId = '107';
                                  $extended['dontshowonmain'] = 1;
                                  $extended['nonews'] = 1;
                                  break;  
                              
                               // other    
                              case '1':
                                  $listId = '1';
                                  break;              
                          }
                          $user = $modx->getObject('modUser', array('username' => $_POST['email']));
                      
                          if($user){
                              $profile = $user->getOne('Profile');
                              $extended = $profile->get('extended');
                              $extended['subscribe'] = 1;
                              $profile->set('extended', $extended['subscribe']);
                              $profile->save();
                              $modx->runSnippet('addNewContact', array('listId' => $listId, 'userId' => $user->get('id')));
                          }
                          return $AjaxForm->success('Вы зарегистрированы', array('success' => '#successReg', 'email' => $_POST['email']));
                      }
                      
                      //$modx->log(1, print_r($_POST,1));
                      Евгений
                      19 января 2021, 12:49
                      0
                      честно говоря вообще не понимаю каким место это может помочь с моей задачей :) но было интересно
                      Артур
                      19 января 2021, 12:55
                      0
                      Ну вам же надо валидацию делать, вызвав bxSender через AjaxForm у вас будет валидация)))
                      {'!AjaxForm' | snippet:[
                                  'snippet' =>'bxSender'
                                  'form' =>'@FILE chunks/forms/regForm.html'
                                  'activationEmailTpl' =>EmailTpl'     
                                  'usernameField' =>'email'
                                  'passwordField' =>'password'
                                  'validate'=>'nospam:blank,
                                  password:required:minLength=^8^,
                                  password_confirm:password_confirm=^password^,
                                  fullname:required:minLength=^2^,
                                  acceptRules2:required,
                                  usergroups:required,
                                  email:required:email'           
                                  ]}
                      Андрей
                      19 января 2021, 13:06
                      0
                      А откуда в ajaxForm валидация, если это просто обёртка для вызываемого сниппета?
                      Артур
                      19 января 2021, 13:10
                      0
                      AjaxForm использует валидацию FormIt.
                      Андрей
                      19 января 2021, 13:37
                      0
                      Так если вызвать bxSender, откуда возьмётся валидация formIt?
                      {'!AjaxForm' | snippet:[
                                  'snippet' =>'bxSender'  
                      ]}
                      Артур
                      19 января 2021, 13:42
                      0
                      Я же выше скинул свой код, который я использую для регистрации на сайте, вы видите там вызов FormIt? Нет, а валидация есть. Ещё можно заглянуть в исходники AjaxForm core/components/ajaxform/model/ajaxform/ajaxform.class.php строка 149.
Александр Мельник
17 января 2021, 11:57
0
Не знаю что такое bxsender, обычно пишу подписку на рассылку самостоятельно. Но есть только один надежный способ защиты — это отправлять на указанную почту письмо с некой ссылкой для подтверждения. Все эти каптчи не очень хорошо работают. Может это есть в bxsender?
    Евгений
    17 января 2021, 12:05
    0
    так суть в том что BxSender так же шлет письмо авторизации с ссылкой для подтверждения. А задача отсеять от этого дела роботов-спамеров. Чтобы они не заказывали письма на несуществующие ящики

    В bxsender нет никакого такого функционала и ТП там тоже вобщем то нет, одно название…
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    19