gpt4 book ai didi

ajax - 为什么 Yii2 验证码无法通过客户端的验证?

转载 作者:行者123 更新时间:2023-12-04 23:00:30 25 4
gpt4 key购买 nike

我正在使用 Yii2 管理模块,验证码图像显示在表单上。在我输入验证码后,提示总是在客户端显示错误消息,但我确定它输入正确。然后查看源码,发现我没有设置属性captchaAction ( \yii\captcha\CaptchaValidator ) 正确,默认值为 captchaAction site/captcha ,但我的 Controller 是 app\modules\admin\controllers\PublicController ,我认为captchaAction的值应该是admin/public/captcha ,但是如何设置呢?

以下是我的查看页面代码:

<?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
'template' => '<div class="row"><div class="col-lg-4">{image}</div> &nbsp;<div class="col-lg-7">{input}</div></div>',
'captchaAction' => 'public/captcha',
]); ?>

这是我的 Controller :
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
'minLength' => 3,
'maxLength' => 5,
],
];
}
public function actionLogin()
{
$model = new LoginForm();
if ( Yii::$app->request->isPost ) {
# code ...
} else {
return $this->render('login', [
'model' => $model,
'title' => Yii::$app->params['adminLogin'],
]);
}
}

最佳答案

小心通过 AJAX 验证的表单。如果您通过 Ajax 验证,Yii 的验证码将被重新加载。因此,在这种情况下,我们可以通过两个选项来解决:

  • 禁用 ajaxValidation , 启用 clientValidation .如:注册表单

  • $form = ActiveForm::begin([
    'id' => 'registration-form',
    'enableAjaxValidation' => true,
    'enableClientValidation' => false
    ]);
  • 覆盖 CaptchaAction 的函数验证,不要getVerifyCode通过 AJAX。

  • if(\Yii::$app->request->isAjax == false) {
    $this->getVerifyCode(true);
    }

    关于ajax - 为什么 Yii2 验证码无法通过客户端的验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26923230/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com