CaptchaAction is used together with Captcha and CaptchaValidator to provide the CAPTCHA feature. By configuring the properties of CaptchaAction, you may customize the appearance of the generated CAPTCHA images, such as the font color, the background color, etc. Note that CaptchaAction requires either GD2 extension or ImageMagick PHP extension. Using CAPTCHA involves the following steps: 1. Override [[\yii\web\Controller::actions()]] and register an action of class CaptchaAction with ID 'captcha' 2. In the form model, declare an attribute to store user-entered verification code, and declare the attribute to be validated by the 'captcha' validator. 3. In the controller view, insert a Captcha widget in the form.
Since: 2.0
Author: Qiang Xue (qiang.xue@gmail.com)
Inheritance: extends yii\base\Action
Ejemplo n.º 1
0
 public function validate($input, $caseSensitive)
 {
     // Skip validation on AJAX requests, as it expires the captcha.
     if (Yii::$app->request->isAjax) {
         return true;
     }
     return parent::validate($input, $caseSensitive);
 }
Ejemplo n.º 2
0
 /**
  * @inheritdoc
  * 
  * Creates the default cache component if it is not provided.
  */
 public function init()
 {
     parent::init();
     $this->controllerNamespace = 'jlorente\\captcha';
     $this->setAliases(['@captchaRoute' => '/' . $this->getUniqueId() . '/captcha/index']);
     if (empty($this->cache)) {
         $this->setCache(['class' => ApcCache::className(), 'keyPrefix' => 'captcha_']);
     }
     if (empty($this->captchaAction)) {
         $this->captchaAction = ['class' => CaptchaAction::className(), 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null];
     }
 }
Ejemplo n.º 3
0
 protected function generateVerifyCode()
 {
     if ($this->isDigital) {
         if ($this->minLength > $this->maxLength) {
             $this->maxLength = $this->minLength;
         }
         if ($this->minLength < 3) {
             $this->minLength = 3;
         }
         if ($this->maxLength > 20) {
             $this->maxLength = 20;
         }
         $length = mt_rand($this->minLength, $this->maxLength);
         $code = '';
         for ($i = 0; $i < $length; $i++) {
             $code .= mt_rand(0, 9);
         }
         return $code;
     }
     return parent::generateVerifyCode();
 }
Ejemplo n.º 4
0
 /**
  * Initializes the class map.
  */
 protected function initClassMap()
 {
     $this->classMap = ArrayHelper::merge([self::CLASS_ACCOUNT => Account::className(), self::CLASS_TOKEN => AccountToken::className(), self::CLASS_PROVIDER => AccountProvider::className(), self::CLASS_LOGIN_HISTORY => AccountLoginHistory::className(), self::CLASS_PASSWORD_HISTORY => AccountPasswordHistory::className(), self::CLASS_LOGIN_FORM => LoginForm::className(), self::CLASS_PASSWORD_FORM => PasswordForm::className(), self::CLASS_SIGNUP_FORM => SignupForm::className(), self::CLASS_CONNECT_FORM => ConnectForm::className(), self::CLASS_FORGOT_PASSWORD_FORM => ForgotPasswordForm::className(), self::CLASS_WEB_USER => User::className(), self::CLASS_CAPTCHA => Captcha::className(), self::CLASS_CAPTCHA_ACTION => CaptchaAction::className(), self::CLASS_PASSWORD_BEHAVIOR => PasswordAttributeBehavior::className(), self::CLASS_PASSWORD_VALIDATOR => PasswordStrengthValidator::className()], $this->classMap);
 }
Ejemplo n.º 5
0
 /**
  * Renders the CAPTCHA image.
  * @param string $code the verification code
  * @return string image contents
  */
 protected function renderImage($code)
 {
     // alphabets ?
     if (!$this->useMbChars) {
         return parent::renderImage($code);
     }
     // font defaults to seto-mini.ttf
     if ($this->mbFontFile === null) {
         $this->mbFontFile = __DIR__ . DIRECTORY_SEPARATOR . 'seto-mini.ttf';
     }
     $encoding = 'UTF-8';
     if (Captcha::checkRequirements() === 'gd') {
         // check if conversion to Shift_JIS is needed
         $gd_info = gd_info();
         if ($gd_info['JIS-mapped Japanese Font Support']) {
             $code = mb_convert_encoding($code, 'SJIS', 'UTF-8');
             $encoding = 'SJIS';
         }
         return $this->mbRenderImageByGD($code, $encoding);
     } else {
         return $this->mbRenderImageByImagick($code, $encoding);
     }
 }
Ejemplo n.º 6
0
 public function actions()
 {
     return ['captcha' => ['class' => CaptchaAction::className()]];
 }
Ejemplo n.º 7
0
 /**
  * @inheritdoc
  */
 public function actions()
 {
     return ['error' => ['class' => ErrorAction::className()], 'about' => ['class' => ViewAction::className(), 'defaultView' => 'about'], 'captcha' => ['class' => CaptchaAction::className(), 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, 'backColor' => 0xf5f5f5, 'height' => 34]];
 }
Ejemplo n.º 8
0
 public function actions()
 {
     return ['captcha' => ['class' => CaptchaAction::className(), 'minLength' => 7, 'maxLength' => 7]];
 }
Ejemplo n.º 9
0
 public function __construct($id, $controller, $config = [])
 {
     $fontFile = '@app/components/captcha/gtw.ttf';
     $config = ArrayHelper::merge(compact('fontFile'), $config);
     parent::__construct($id, $controller, $config);
 }
Ejemplo n.º 10
0
 public function actions()
 {
     return ['error' => ['class' => ErrorAction::className()], 'captcha' => ['class' => CaptchaAction::className(), 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null]];
 }