本文实例讲述了Yii使用Captcha验证码的方法。分享给大家供大家参考,具体如下:
详细代码可参考:yii自带的示例代码post项目,里面有一个contact表单用到了验证码.
1. Model:
将验证码加入UserLogin的一个属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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,
),
);
}
ublic 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);
}
|
在验证用户名密码前,检查验证码:
1
2
|
if ( $this ->createAction( 'captcha' )->validate( $model ->verifyCode, false))
{
|
3. view
在视图中显示验证码图片,输入框
1
2
3
|
<?php $this ->widget( 'CCaptcha' ); ?>
<?php echo CHtml::activeTextField( $model , 'verifyCode' , array ( 'tabindex' =>1)); ?>
<img src= "http://www.XXXX.net/uploads/123456.jpg" alt= "" >
|
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。