amrozhou 2015-04-01 14:29:33 45891次浏览 9条回复 15 4 1

首先对应控制器中定义captcha,对应模型中声明captcha变量。

 public function actions() {
        return [
            'captcha' =>  [
                'class' => 'yii\captcha\CaptchaAction',
                'height' => 50,
                'width' => 80,
                'minLength' => 4,
                'maxLength' => 4
            ],
        ];
    }

设置一些简单属性,也可以不设。

对应视图中添加表单:

  <?= $form->field($user_login,'captcha')->widget(yii\captcha\Captcha::className()
                                        ,['captchaAction'=>'user/captcha',
                                        'imageOptions'=>['alt'=>'点击换图','title'=>'点击换图', 'style'=>'cursor:pointer']]);?>

captchaAction 指定captcha所在的控制器路径,默认是‘site/captcha’,不换到指定位置的话,很容易,验证码就显示不出来。 imageOptions设定一些参数,例如 手势,提示等等。

对应布局中,如下:以确保你在点击验证码可以自动刷新

<?php $this->beginPage() ?> <?php $this->beginBody() ?> //your codes... <?= $contents; ?> //your codes... <?php $this->endBody() ?> <?php $this->endPage() ?>

最后,控制器中调用render而非renderPartial: return $this->render('login',['user_login'=>$user_login]);

觉得很赞
  • 回复于 2015-04-01 14:48 举报

    都说是yii里的一个小bug,需手动修改 \yii\captcha\CaptionAction run方法里的 return $this->renderImage($this->getVerifyCode(true));← 写入参数 ‘true’(默认是false),验证码 方会刷新。

    1 条回复
    回复于 2015-06-20 15:40 回复

    楼主说的“小bug”是:用户刷新页面后,验证码样式改变(比如:字母的倾斜角度)但是验证码内容不变(比如:验证码是svgw,刷新之后还是svgw)。但是还有一个问题来请教楼主,如何通过点击“换一个”来更换验证码呢?

    , 觉得很赞
  • 回复于 2016-02-19 03:01 举报

    不是bug,看了源码之后,要求再次请求才会刷新认证码,以下为我写的 js

    //刷新验证码
    function refreshCaptcha(_captcha){
        $.getJSON("/site/captcha?refresh=true",function(res){
    
            var dataUrl = _captcha.attr("data-url");
            if(!dataUrl){
                dataUrl = _captcha.attr("src");
                _captcha.attr("data-url",dataUrl);
            }
            _captcha.attr("src",dataUrl+"?rd="+Math.random());
        });
    }
    
    觉得很赞
  • 回复于 2016-05-11 21:07 举报

    为啥我生成验证码图片失败呢?

    4 条回复
    回复于 2016-05-12 23:41 回复

    失效?是没有显示出来?

    回复于 2016-05-13 09:44 回复

    出来了,路径错了谢谢!

    回复于 2016-10-25 11:12 回复

    我也遇到了同样的问题,验证码出不来啊。请问路径错了是怎么改的?yii新手,求指教一下。

    回复于 2017-04-22 21:38 回复

    为什么我的是 路径不写就生成了。

  • 回复于 2016-06-03 15:47 举报

    可不可以手动加

          <img src="images/VerifyCode.aspx.png"> <a id="kanbuq" href="javascript:;">看不清,换一张</a> </div>
    

    不使用表单生成

  • 回复于 2016-07-29 16:52 举报

    最好是自己继承一下,再修改

    namespace app\actions; // 改成自己的名称空间  
    
    class CaptchaAction extends yii\captcha\CaptchaAction {
        public $autoRegenerate = true;
    
        public function run() 
        {
           if ($this->autoRegenerate && Yii::$app->request->getQueryParam(self::REFRESH_GET_VAR) === null) {
               $this->setHttpHeaders();
               Yii::$app->response->format = Response::FORMAT_RAW;
               return $this->renderImage($this->getVerifyCode(true));
           }
           return parent::run();
        }
    }
    
  • 回复于 2016-09-28 13:33 举报

    前台验证成功,表单提交就提示验证码错误;原因可能是ajax验证一次 致使验证码在session中已经变了 再提交就提示错误了 怎么解决?

    , 觉得很赞
  • 回复于 2017-04-22 22:20 举报

    我要纠正一个错误 请参考上面這个注意captchaAction并不是链接,是你再控制器actions返回的captcha這个名称。

  • 回复于 2018-03-19 11:10 举报

    我这个验证码没显示出来啊,大佬们,请指教

  • 回复于 2018-05-18 18:53 举报

    也有一种可能:如果系统增加RBAC权限控管,需要开放 site/captcha 权限给匿名用户,否则加载CAPTCHA图片时是 403 Forbidden。

您需要登录后才可以回复。登录 | 立即注册