在Yii中使用Captcha验证码


在Yii中使用Captcha验证码:

详细代码请参考:yii自带的示例代码post 项目,里面有一个contact表单用到了验证码.

1,Model:

将验证码加入UserLogin的一个属性:

class UserLogin extends CFormModel
{
	public $username;
	public $password;
	public $rememberMe;
	public $verifyCode;

	public function rules()
	{
		return array(
			// username and password are required
			array('username, password,verifyCode', 'required'),
			// rememberMe needs to be a boolean
			array('rememberMe', 'boolean'),
			// password needs to be authenticated
			array('password', 'authenticate'),
			// verifyCode needs to be entered correctly
			array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()),
		);
	}

	/**
	 * Declares attribute labels.
	 */
	public function attributeLabels()
	{
		return array(
			'rememberMe'=>Yii::t('user',"Remember me next time"),
			'username'=>Yii::t('user',"username or email"),
			'password'=>Yii::t('user',"password"),
			'verifyCode'=>Yii::t('user','Verification Code'),
		);
	}

2,Controller

在LoginController控制器加入映射动作CCaptchaAction

	public function actions()
	{
		return array(
			// captcha action renders the CAPTCHA image displayed on the contact page
			'captcha'=>array(
				'class'=>'CCaptchaAction',
				'backColor'=>0xf4f4f4,
				'padding'=>0,
				'height'=>30,
				'maxLength'=>4,
			),
			);
	}

public function actionLogin()
	{
		
		if (Yii::app()->user->isGuest) {
			$model=new UserLogin;
			// collect user input data
			if(isset($_POST['UserLogin']))
			{
				
				$model->attributes=$_POST['UserLogin'];
//在此核对验证码
				if($this->createAction('captcha')->validate($model->verifyCode, false))
				{
					// validate user input and redirect to previous page if valid
					if($model->validate()) {
					//admin login only
					if( Yii::app()->getModule('user')->isAdmin()==1 )
					{
					$this->lastViset();
					if (strpos(Yii::app()->user->returnUrl,'/index.php')!==false)
						$this->redirect(Yii::app()->controller->module->returnUrl);
					else
						$this->redirect(Yii::app()->user->returnUrl);
					}else
					{//if no admin when login out
						$this->redirect(Yii::app()->controller->module->logoutUrl);
					}
				}
				}else
				{//提示错误
					$model->addError('verifyCode','验证码不对');
				}
			}
			// display the login form
			$this->render('/user/login',array('model'=>$model));
		} else
			$this->redirect(Yii::app()->controller->module->returnUrl);
	}





在验证用户名密码前,检查验证码:

if($this->createAction('captcha')->validate($model->verifyCode, false))
				{


3,view

在视图中显示验证码图片,输入框

<?php $this->widget('CCaptcha'); ?>
		<?php echo CHtml::activeTextField($model,'verifyCode',array('tabindex'=>1)); ?>



---------------------------the end------------------------------------



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值