Капча
Re: Капча
Где прочитать как вообще работает капча? Нужно ли на сайте несколько разных капчей, если допустим нужно логин и подтверждение действий в других контроллерах или достаточно одной site/captcha? Как понять что происходит, если капча выдает "Неправильный проверочный код"?
Re: Капча
Генерирует случайное число в привязке к маршруту site/captcha в captchaAction, сохраняет в сессию и рисует его в изрбражении. А потом её валидатор сравнивает введённое значение со значением из сессии.
Капча из одного контроллера будет всегда показывать один и тот же код во всех формах и изменится только когда её обновят кликом или отправкой формы. Следовательно, если пользователь откроет одновременно две формы с той же капчей и отправит одну, то вторая капча уже устареет. Так что если хотите сделать независимые капчи, то создавайте их в каждом контроллере отдельно.
Капча из одного контроллера будет всегда показывать один и тот же код во всех формах и изменится только когда её обновят кликом или отправкой формы. Следовательно, если пользователь откроет одновременно две формы с той же капчей и отправит одну, то вторая капча уже устареет. Так что если хотите сделать независимые капчи, то создавайте их в каждом контроллере отдельно.
Re: Капча
Мне непонятен сам процесс валидации капчи. Что и как происходит и в какой последовательности.
Создал модель только с капчей:
Создал контроллер с экшеном для капчи:
Создал форму для капчи в представлении. Там только сама капча и кнопка субмит:
Более ничего не делал.
При нажатии на субмит появляется сообщение "Неправильный проверочный код" и все. Я не вижу никакого запроса на сабмит формы, я не вижу никаких записей в логе по поводу валидации капчи и не понимаю как отслеживать сей процесс в случае если что-то идет не так.
Создал модель только с капчей:
Код: Выделить всё
class CaptchaForm extends Model
{
public $captcha;
public function rules()
{
return [
['captcha', 'required'],
['captcha', 'captcha'/*, 'captchaAction' => 'order/captcha'*/],
];
}
}
Код: Выделить всё
class OrderController extends \yii\web\Controller
{
public function actionStep3()
{
$form = new CaptchaForm();
if ($form->load(Yii::$app->request->post()) && $form->validate()) {
return $this->render('final_step');
}
return $this->render('step3', ['model' => $form]);
}
public function actions()
{
return [
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
],
];
}
}
Код: Выделить всё
$form = ActiveForm::begin();
echo $form->field($model, 'captcha')->widget(Captcha::className(), [
'captchaAction' => 'order/captcha',
]);
echo Html::submitButton("Done");
$form->end();
При нажатии на субмит появляется сообщение "Неправильный проверочный код" и все. Я не вижу никакого запроса на сабмит формы, я не вижу никаких записей в логе по поводу валидации капчи и не понимаю как отслеживать сей процесс в случае если что-то идет не так.
Re: Капча
А зачем Вы закомментировали captchaAction?
Код: Выделить всё
['captcha', 'captcha', 'captchaAction' => '/order/captcha'],
...
'captchaAction' => '/order/captcha',
Re: Капча
А зачем 2 раза указывать captchaAction? Мало того, а как в модели знать в каком таком контроллере ее используют? Ладно, у меня пример вырожденный и как бы все известно, а если CaptchaForm используется в 5 разных контроллерах? И как разрешить конфликт с этими контроллерами? Дело ли модели знать про контроллеры?
И потом, хотелось бы не просто исправить чтобы заработало, а понять что, зачем, почему и как отлаживать если что.
И потом, хотелось бы не просто исправить чтобы заработало, а понять что, зачем, почему и как отлаживать если что.
Re: Капча
Один для валидатора, второй для виджета. А если указать только в виджете, то виджет выведет капчу из order/captcha, а валидатор возьмёт по умолчанию из site/captcha. В качестве ключа в сессии у капчи используется именно маршрут вроде $_SESSION['__captcha/модуль/контроллер/действие'], поэтому если будет разный captchaAction, то из-за несовпадения ключей всегда получите "Неправильный проверочный код".andreyrud писал(а):А зачем 2 раза указывать captchaAction?
Последний раз редактировалось ElisDN 2015.05.08, 16:35, всего редактировалось 1 раз.
Re: Капча
А если подходить с точки зрения правильности, то это да, весьма костыльный момент. Но всё равно валидатору как-то надо указать, с какой именно капчей работать. А в случае с несколькими контроллерами можно оставить всего одну site/captcha.
Re: Капча
Кто-нибудь сталкивался со странным поведением капчи в Open Server?
Перелез на Open Server. Картинка с капчей периодически не отображается совсем. Файрфокс висит на "Ожидание ответа от ..." F5 повторяет ситуацию. Никаких следов происшествия нигде и ни в каких логах не обнаружил. ФайрБаг чист. Путем неизвестной комбинаций перезагрузок Файфокса, Open Server и Винды дошел до того, что капча появляется и работает...
Перелез на Open Server. Картинка с капчей периодически не отображается совсем. Файрфокс висит на "Ожидание ответа от ..." F5 повторяет ситуацию. Никаких следов происшествия нигде и ни в каких логах не обнаружил. ФайрБаг чист. Путем неизвестной комбинаций перезагрузок Файфокса, Open Server и Винды дошел до того, что капча появляется и работает...