在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

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

widget('CCaptcha'); ?>
		1)); ?>



 
  

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

 
  
 
 

你可能感兴趣的:(YII)