【问题标题】:Yii2 captcha image is not displayingYii2 验证码图像未显示
【发布时间】:2019-04-03 22:27:56
【问题描述】:

我想在登录页面添加验证码。但是有一个错误,验证码图片没有显示,当我尝试查看验证码图片http://xxx.yii2/site/captcha?v=5806eb0c3aa05时,下面的错误显示

图片“http://xxx.yii2/site/captcha?v=5806ce094fa84”无法显示,因为它包含错误。

下面是我的站点控制器

class SiteController extends Controller {
  public function behaviors()
  {
    return [
        'access' => [
            'class' => AccessControl::className(),
            'only' => ['logout','resetPassword'],
            'rules' => [
                [
                    'actions' => ['logout','resetpassword'],
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'logout' => ['post'],
            ],
        ],
    ];
}

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

LoginForm 控制器

class LoginForm extends Model {
  public $username;
  public $password;
  public $rememberMe = true;
  public $verifyCode;

  private $_user = false;

  const ERROR_NONE=0;
  const ERROR_USERNAME_INVALID=1;
  const ERROR_USERNAME_LOCKED = 3;
  const ERROR_USERNAME_INACTIVE = 4;
  const ERROR_PASSWORD_INVALID=2;

  public $role_id;
  public $salt;
  public $_id;
  private $_identity;

  /**
   * @return array the validation rules.
   */
  public function rules()
  {
    return [

        [['username', 'password'], 'required'],
        ['rememberMe', 'boolean'],
        ['username','validateMember'],
        ['password', 'validatePassword'],
        ['verifyCode', 'captcha'],

    ];
  } 

登录表单视图

<?php $form = ActiveForm::begin([
    'id' => 'login-form',
    'options' => ['class' => 'form-horizontal'],
    'fieldConfig' => [
        'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
        'labelOptions' => ['class' => 'col-lg-1 control-label'],
    ],
]); ?>

    <?= $form->field($model, 'username') ?>

    <?= $form->field($model, 'password')->passwordInput() ?>

    <?= $form->field($model, 'verifyCode')->widget(Captcha::className()) ?>

    <?= $form->field($model, 'rememberMe')->checkbox([
        'template' => "<div class=\"col-lg-offset-1 col-lg-3\">{input} {label}</div>\n<div class=\"col-lg-8\">{error}</div>",
    ]) ?>

    <div class="form-group">
        <div class="col-lg-offset-1 col-lg-11">
            <?= Html::submitButton('<i class="fa fa-sign-in fa-fw"></i> Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
        </div>
    </div>

<?php ActiveForm::end(); ?>

【问题讨论】:

    标签: yii2 captcha


    【解决方案1】:

    检查一下。

    请注意,CaptchaAction 需要 GD2 扩展或 ImageMagick PHP 扩展。

    见:Class yii\captcha\CaptchaAction

    问题的另一个可能原因是指定了错误的操作。要解决它,您需要在模型和小部件中指定是否手动。

    型号:

    ['verifyCode', 'captcha', 'captchaAction' => 'site/captcha']
    

    小部件:

    <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
        'captchaAction' => 'site/captcha'
    ]) ?>
    

    【讨论】:

    • 我有 imagick,使用 Captcha::checkRequirements();
    • 如果您检索到特定错误是什么,那么理解问题会容易得多。您需要探索调试面板。左上角有一个选择器,您可以在其中选择当前显示的请求以外的其他请求。
    • 我得到的唯一错误是 - 无法加载给定的 url
    • 什么是失败的网址?您的验证码操作位于路线“站点/验证码”。您必须确保它是可访问的 (1) 和 (2) 您的小部件和模型指出了这一点。
    • 我已根据您的建议更改了模型和表格
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多