2015-12-21 4 views
1

Я использую стандартную реализацию перекодировки yii2 по умолчанию. У меня проблема: я хочу изменить код captcha каждый раз, когда я обновляю страницу, но когда я обновляю страницу, код моей captcha не изменяется.yii2 captcha не изменяется на странице обновления

+0

Скорее всего, captcha хранится i n a cash, – volkinc

+1

Пожалуйста, отредактируйте вопрос и разместите код, иначе вопрос будет закрыт, см. справочный центр. – kebs

+1

Нет необходимости публиковать какой-либо код. Я использую реализацию по умолчанию captcha. –

ответ

-1

Update Ваш CaptchaAction в

public function actions() 
{ 
    return [ 
     'error' => [ 
      'class' => 'yii\web\ErrorAction', 
     ], 
     'captcha' => [ 
      'class' => 'yii\captcha\CaptchaAction', 
      'fixedVerifyCode' => null, 
     ], 
    ]; 
} 

Read Fixed Verify Code

IF fixedVerifyCode если установлен, то расшифрованы же значение, выставиться в fixedVerifyCode

// code from yii\captcha\CaptchaAction in Yii2 

public function getVerifyCode($regenerate = false) 
{ 
    if ($this->fixedVerifyCode !== null) { 
     return $this->fixedVerifyCode; 
    } 

    $session = Yii::$app->getSession(); 
    $session->open(); 
    $name = $this->getSessionKey(); 
    if ($session[$name] === null || $regenerate) { 
     $session[$name] = $this->generateVerifyCode(); 
     $session[$name . 'count'] = 1; 
    } 

    return $session[$name]; 
} 
+0

Это не сработает, поскольку «fixedVerifyCode» установлен как стандартный. –

+0

Ответ не подходит для большинства случаев. – cronfy

0

Я нашел грязный способ обойти это - просто активируйте событие click, когда страница загружается. Добавьте этот код в самый конец вашего файла view, после окончания формы;

$js = <<<JS 
     $('#loginform-captcha-image').trigger('click'); 
JS; 
$this->registerJs($js, $this::POS_READY); 

Это не очень красиво, но это работает, и это единственный способ я нашел, чтобы получить aroun г этой проблемы, которая также страдает свои собственные сайты.

1

Наиболее правильным решением будет создать свой собственный CaptchaAction, который расширяет yii\captcha\CaptchaAction и переопределить метод run() следующим образом:

namespace app\actions; // Change to your own  

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(); 
    } 
} 
0

потому, что вы установили YII_ENV на ТЕСТ как этот defined('YII_ENV') or define('YII_ENV', 'test'); изменить его на defined('YII_ENV') or define('YII_ENV', 'prod');

0

попробуйте это

<script> 

window.onload = hello; 

function hello() 
{  
    document.getElementById('loginform-captcha-image').click(); 
} 

</script> 
Смежные вопросы