защитить форму bxsender от спам подписок
на сайте стоит форма подписки через модуль bxsender
на него часто стали подписываться спам роботы с несуществующими ящиками, в результате приходят письма о недоставленных письмах а эти ящики
хотелось бы как то перекрыть этот канал )
может невидимая рекапча, может еще есть какие то способы скрыть от роботов эту форму
в формах Formit стоит обычная рекапча2 и она отлично справляется со своей задачей а вот bxsender форму защитить не знаю как
на него часто стали подписываться спам роботы с несуществующими ящиками, в результате приходят письма о недоставленных письмах а эти ящики
хотелось бы как то перекрыть этот канал )
может невидимая рекапча, может еще есть какие то способы скрыть от роботов эту форму
в формах Formit стоит обычная рекапча2 и она отлично справляется со своей задачей а вот bxsender форму защитить не знаю как
Комментарии: 19
Позвольте полюбопытствовать, почему не пишите в техподдержку это же платное дополнение?
утолю ваше любопытство — написали но там не факт что дождешься ответа :)
Спасибо, я вас тоже порадую, обязательно будет ответ:-)
Очень надеюсь что он будет полезным, а то это крайне редко происходит :)
Если найдёте ответ, то напишите ваше решение сюда, мне вот стало интересно, потому как в документации информации об этом я не нашёл, а вариант делать проверку на js… можно конечно, но как-то не нравится.
да уже почти вроде нашел способ но от автора пакета нет обратной связи до сих пор
по идее в форму можно вставить пустое поле невидимое которое роботы заполняют и проводить валидацию на предмет заполнения
только вот в пакете как я понимаю нет валидации как в formit
по идее в форму можно вставить пустое поле невидимое которое роботы заполняют и проводить валидацию на предмет заполнения
только вот в пакете как я понимаю нет валидации как в formit
Ну можно попробовать приладить AjaxForm, я через два него делал авторизацию, это немного другое но попробовать можно.
ну тут не авторизация по сути а просто отправка ящика по нажатию кнопки
как такое провернуть? ajaxfrom вызвать чанк а в нем bxsender получается так чтоли? :)
как такое провернуть? ajaxfrom вызвать чанк а в нем bxsender получается так чтоли? :)
Ну да, вызвать сначала FormIt, если валидация прошла, то bxsender. AjaxForm он же просто форму отправляет. Завтра скину свой скрипт для регистрации, там понятно всё станет.
а ну да, мне получается в формит bxsender завернуть :)
Сорри вчера весь день без интернета был, не смог код отправить, делаю это сегодня.
Это вызов
Это вызов
{'!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));
честно говоря вообще не понимаю каким место это может помочь с моей задачей :) но было интересно
Ну вам же надо валидацию делать, вызвав 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'
]}
А откуда в ajaxForm валидация, если это просто обёртка для вызываемого сниппета?
AjaxForm использует валидацию FormIt.
Так если вызвать bxSender, откуда возьмётся валидация formIt?
{'!AjaxForm' | snippet:[
'snippet' =>'bxSender'
]}
Я же выше скинул свой код, который я использую для регистрации на сайте, вы видите там вызов FormIt? Нет, а валидация есть. Ещё можно заглянуть в исходники AjaxForm core/components/ajaxform/model/ajaxform/ajaxform.class.php строка 149.
Не знаю что такое bxsender, обычно пишу подписку на рассылку самостоятельно. Но есть только один надежный способ защиты — это отправлять на указанную почту письмо с некой ссылкой для подтверждения. Все эти каптчи не очень хорошо работают. Может это есть в bxsender?
так суть в том что BxSender так же шлет письмо авторизации с ссылкой для подтверждения. А задача отсеять от этого дела роботов-спамеров. Чтобы они не заказывали письма на несуществующие ящики
В bxsender нет никакого такого функционала и ТП там тоже вобщем то нет, одно название…
В bxsender нет никакого такого функционала и ТП там тоже вобщем то нет, одно название…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.