تالار گفتمان nCIS.ir

نسخه‌ی کامل: لاگین کردن به وسیله ajax و captcha بعد از اولین ورود نا موفق
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
Huh
من لاگین رو به صفحه ایندکس سایتم آوردم
این کد های من هست ، اگه دفعه اول وارد بشم ( که نیازی به کپتچا نداره ) به صورت صحیح وارد میشه
اگه نام کاربری یا کلمه عبور اشتباه وارد بشه کپتچا نمایان میشه ، از  زمانی که کپتچا ظاهر میشه ، در صورتی که نام کاربری کلمه عبور و کپیچا صحیح هم باشه ، پیغام خطا کپتچا صحیح نیست ظاهر میشه. و لاگین صورت نمیگیره .

loginForm
<?php

/**
* LoginForm class.
* LoginForm is the data structure for keeping
* user login form data. It is used by the 'login' action of 'SiteController'.
*/
class LoginForm extends CFormModel
{
public $username;
public $password;
public $rememberMe;
public $verifyCode;
private $_identity;

/**
* Declares the validation rules.
* The rules state that username and password are required,
* and password needs to be authenticated.
*/
public function rules()
{
return array(
// username and password are required
array('username, password', 'required'),
// rememberMe needs to be a boolean
array('rememberMe', 'boolean'),
// password needs to be authenticated
array('password', 'authenticate'),
// 
array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(), 'on' => 'captchaNeed'),
);
}

/**
* Declares attribute labels.
*/
public function attributeLabels()
{
return array(
'rememberMe'=>'Remember me next time',
);
}

/**
* Authenticates the password.
* This is the 'authenticate' validator as declared in rules().
*/
public function authenticate($attribute,$params)
{
if(!$this->hasErrors())
{
$this->_identity=new UserIdentity($this->username,$this->password);
if(!$this->_identity->authenticate())
$this->addError('password','Incorrect username or password.');
}
}

/**
* Logs in the user using the given username and password in the model.
* @return boolean whether login is successful
*/
public function login()
{
if($this->_identity===null)
{
$this->_identity=new UserIdentity($this->username,$this->password);
$this->_identity->authenticate();
}
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
Yii::app()->user->login($this->_identity,$duration);
return true;
}
else
return false;
}
}


site/index
/**
* This is the default 'index' action that is invoked
* when ad action is not explicitly requested by users.
*/
public function actionIndex(){
// set default layout
$this->layout = 'main';

$loginModel = new LoginForm;

if(Yii::app()->request->isAjaxRequest)
{
if(isset(Yii::app()->session['captchaNeed']))
LoginModel->scenario = 'captchaNeed';

if(isset($_POST['LoginForm']))
{
$loginModel->attributes = $_POST['LoginForm'];

if($loginModel->validate() && $loginModel->login())
{
echo '<script>window.location= "' . Yii::app()->createUrl('site/dashboard') . '"</script>';
unset(Yii::app()->session['captchaNeed']);
Yii::app()->end();

}else{
Yii::app()->session['captchaNeed'] = true;
$loginModel->scenario = 'captchaNeed';
}

$this->renderPartial('_login', array('model' => $loginModel));
}
}

if(!Yii::app()->request->isAjaxRequest)
$this->render('index', array('loginModel' => $loginModel));

}

siteController --- actions()

public function actions()
{
return array(
'captcha'=>array(
'class'=>'CCaptchaAction',
'minLenght'=>4,
'maxLenght'=>4,
'testLimit'=>1,
'backColor'=>0x7D287E,
'foreColor'=>0xFFFFFF,
'height'=>24,
'width'=>100,
'offset'=>1,
),
)
}

viewsiteindex
<section class="col-xs-8" id="index-login">
<?php if(Yii::app()->user->isGuest) : ?>
<div id="login">
<?php $this->renderPartial('_login', array('model' => $loginModel)) ; ?>
</div>
<?php echo CHtml::ajaxSubmitButton('Login',
Yii::app()->createUrl('site/index'),
array(
'type' => 'post',
'update' => '#login',
'data' => 'js:$("#login-form").serialize();
),
array(
'id'=>uniqid(),
'class'=>'btn btn-danger',
)
); ?>
<?php endif; ?>
</section>
</div>
</div>

viewsite_login
<?php
/* @var $this SiteController */
/* @var $model LoginForm */
/* @var $form CActiveForm  */

$this->pageTitle=Yii::app()->name . ' - Login';
$this->breadcrumbs=array(
'Login',
);
?>

<h1>Login</h1>

<p>Please fill out the following form with your login credentials:</p>

<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',

)); ?>

<p class="note">Fields with <span class="required">*</span> are required.</p>

<div class="row">
<?php echo $form->labelEx($model,'username'); ?>
<?php echo $form->textField($model,'username'); ?>
<?php echo $form->error($model,'username'); ?>
</div>

<div class="row">
<?php echo $form->labelEx($model,'password'); ?>
<?php echo $form->passwordField($model,'password'); ?>
<?php echo $form->error($model,'password'); ?>
<p class="hint">
Hint: You may login with <kbd>demo</kbd>/<kbd>demo</kbd> or <kbd>admin</kbd>/<kbd>admin</kbd>.
</p>
</div>

<?php if(CCaptcha::checkRequirements() && $model->scenario == 'captchaNeed'): ?>
<div class="row">
<?php echo $form->labelEx($model,'verifyCode'); ?>
<div>
<?php $this->widget('CCaptcha'); ?>
<?php echo $form->textField($model,'verifyCode'); ?>
</div>
<div class="hint">Please enter the letters as they are shown in the image above.
<br/>Letters are not case-sensitive.</div>
<?php echo $form->error($model,'verifyCode'); ?>
</div>
<?php endif; ?>


<div class="row rememberMe">
<?php echo $form->checkBox($model,'rememberMe'); ?>
<?php echo $form->label($model,'rememberMe'); ?>
<?php echo $form->error($model,'rememberMe'); ?>
</div>

<div class="row buttons">
<?php echo CHtml::submitButton('Login'); ?>
</div>

<?php $this->endWidget(); ?>
</div><!-- form -->
این الان سؤال بود یا آموزش؟
این مشکل بود ، به کپتچا گیر میده
من 2 حالت ورود به سایت دارم
1.وقتی برای اولین بار کاربر کلمه عبور و نام کاربری رو درست وارد می کند ( تو این حالت بدون مشکل وارد میشه )
2.وقتی که کاربر نام کاربری یا کلمه عبور ویا هر دو را اشتباه وارد می کند ( در این حالت کپتچا توی فرم نمایش داده میشه به همراه نام کاربری و کلمه عبور) از این زمان به بعد وقتی همه موارد ( نام کاربری ، کلمه عبور و کپتچا ) صحیح وارد بشن هم باز پیغام خطا کپتچا صحیح نیست ظاهر میشه و کاربر نمیتونه لاگین کنه