开发者社区> 问答> 正文

yii2-user登录增加验证码出错,抓狂啊,yii2好难学啊 400 请求报错 

验证码正常显示,点击也能更换,dubgger里查session里也看到了数据,post过来的数据有的,然而就是显示所填的验证码不正确,

查了一下确实是$this->validate(),验证的时候不通过,验证码的比较,应该是session里存的和post过来的一样那就对了哇?

然后我该怎么查原因??抓狂啊,思路,求思路!

yii2学的挺累的,附一下代码

/*   \vendor\dektrium\yii2-user\models\LoginForm.php   */
public $captcha;
public function rules()//作者的rules格式不和yii2标准的写法一样,为嘛?
{
return [
'requiredFields' => [['login', 'password','captcha'], 'required'],
'captchalPattern'=>['captcha', 'captcha'],
'loginTrim' => ['login', 'trim'],
. . . .


/* \vendor\dektrium\yii2-user\controllers\SecurityController.php*/

public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
['allow' => true, 'actions' => ['login', 'auth','captcha'], 'roles' => ['?']],//没这个验证码不显示
['allow' => true, 'actions' => ['login', 'auth', 'logout'], 'roles' => ['@']],
]]];
}

/** @inheritdoc */
public function actions()
{
    return [
         'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                             'minLength' => 4,
                             'maxLength' => 4
            ],
.....
    ];
}


/*  \vendor\dektrium\yii2-user\views\security\login.php  */
use yii\captcha\Captcha;
. . . .
<?= $form->field($model, 'captcha')->widget(Captcha::className(), [
'captchaAction' => ['/site/captcha']
]) ?>
. . . .

展开
收起
kun坤 2020-05-29 17:49:18 516 0
1 条回答
写回答
取消 提交回答
  • 自己到源码中看一下打印出来 看一下吗 yii/captcha/captchaAction::validate 这个方法######发现原因了,session存的验证码和POST过来的验证码不在一个节拍,session的验证码貌似是上一次的验证码。具体我查查###### 感觉yii2-user做了2次验证,导致的问题

    vendor\dektrium\yii2-user\controllers\SecurityController.php
    $model = \Yii::createObject(LoginForm::className());
    
    $this->performAjaxValidation($model);//第一次
            
             
    if ($model->load(Yii::$app->getRequest()->post()) 
    && $model->login()) {//第二次模型那去验证$model->login(),
                return $this->goBack();
            }

    ######我也感觉是这个二次验证。 因为输入验证码,移出焦点后,会自动ajax验证一次。这时验证是没有错的。但通过查看后端的session,其实这时,session中的验证码已经被刷新了,产生新的验证码。 所以提交的时候,验证码就不对了。还是没有找到解决方法。 谁来解答一下!######我的也是验证码失败,用的是basic  在新建立的module 使用验证码出错,一直验证错误...直接在结构上使用没有问题######回复 @水人 : 继承BaseModel######回复 @燧人氏 : 你的model,继承的是BaseModel,就行######回复 @木易水羊888 : 问题怎么解决的??######回复 @木易水羊888 : 什么东西继承model类而不是ActiveRecord ?######回复 @燧人氏 : 继承model类而不是ActiveRecord

    2020-05-29 17:49:26
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
面向失败设计 立即下载
QQ移送页面框架优化实践 立即下载
QQ移动页面框架优化实践 立即下载