0

yiiではログインモジュールを作成しています。ユーザー名とパスワードが正しく、このユーザーのIDを「成功」テーブルに保存する必要がある場合にのみユーザーにアクセスを許可したいと思います。しかし、ユーザー名だけが正しく、パスワードが間違っている場合は、正しいパスワードを入力する機会を3回だけ与えるために、そのユーザーのIDを「attempt」テーブルに保存します。しかし、これを実装しているとき、パスワードが間違っていると、試行テーブルにエントリが入力されません。私は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を試行テーブルに入力するために必要な変更。私を助けてください。

4

1 に答える 1

0

コメントで述べられているように:

YiiベースのWebサイトにアクセスしているユーザーには、ユーザーIDが割り当てられていません。ログインしているユーザーのみに、userIdが割り当てられています(これは理にかなっています...)。

最善のアプローチは、ログイン試行に対してIPベースのチェックを行うことです。次のコードでユーザーのIPを取得できます。

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

@Stuと@Nikos-Tsirakisへのこの回答のクレジットもあります

于 2012-11-21T16:22:42.023 に答える