如何在密码错误时输入用户

时间:2012-11-21 10:33:47

标签: login yii

在yii我正在创建登录模块。我想仅在用户名和密码正确并且需要将此用户的ID存储到“成功”表中时才授予用户访问权限。但是当只有用户名是正确的并且密码错误时,我想将该用户的id存储到'尝试'表中,以便只给他3次机会输入正确的密码。但是当我实现这个时,当密码错误时,条目不会进入尝试表。我创建了ActionLogin()方法作为 -

public function actionLogin()
{
    $model=new LoginForm;
    $command = Yii::app()->db->createCommand();

    // if it is ajax validation request
    if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }

    // collect user input data
    if(isset($_POST['LoginForm']))
    {
         $model->attributes=$_POST['LoginForm'];
         // validate user input and redirect to the previous page if valid
         if ($model->validate()) 
         {
            if($model->login()) {
                      $command->insert('attempt', array(
                      'id'=>Yii::app()->user->getId(),
                       ));
                      $this->redirect(Yii::app()->user->returnUrl);
             }  
            if(!$model->login())
            {            
            $command->insert('attempt', array(
            'id'=>Yii::app()->user->getId(),
                   ));
             } 
            }
     }

    // display the login form
    $this->render('login',array('model'=>$model));
}

我需要做些什么更改才能在密码错误时将用户的id输入到尝试表中。请帮帮我。

1 个答案:

答案 0 :(得分:0)

如评论中所述:

正在访问基于Yii的网站的用户没有分配用户ID,只有登录的用户才分配了userId(这是有道理的......)。

最好的方法是对登录尝试进行基于IP的检查。您可以通过以下代码检索用户的IP:

Yii::app()->request->userHostAddress

还可以将这个答案归功于@Stu和@ Nikos-Tsirakis