コード例 #1
0
 public function authenticate()
 {
     $phone = Formatter::formatPhone($this->username);
     $user = WebUserModel::model()->findByPhone($phone);
     $keySession = session_id();
     $numberFailLogin = isset(Yii::app()->session[$keySession]) ? Yii::app()->session[$keySession] : 0;
     if ($numberFailLogin >= Yii::app()->params['login']['limit_block']) {
         $this->errorCode = self::ERROR_LIMITED_LOGIN;
         return !$this->errorCode;
         Yii::app()->end();
     }
     if ($user === null) {
         $numberFailLogin += 1;
         $this->errorCode = self::ERROR_USERNAME_INVALID;
     } else {
         if ($user->password !== ($this->auto ? $this->password : UserIdentity::encodePassword($this->password))) {
             $numberFailLogin += 1;
             $this->errorCode = self::ERROR_PASSWORD_INVALID;
         } else {
             if ($user->validate_phone != 1) {
                 $numberFailLogin += 1;
                 $this->errorCode = self::ERROR_NO_VALID_PHONE;
             } else {
                 $userSub = UserSubscribeModel::model()->get($user->phone);
                 if ($userSub && !empty($userSub->package_id)) {
                     $package = PackageModel::model()->findByPk($userSub->package_id)->code;
                 } else {
                     $package = "";
                 }
                 $this->_id = $user->id;
                 $this->setState('lastLoginTime', $user->login_time);
                 $this->setState('fullname', $user->fullname);
                 $this->setState('username', $user->username);
                 $this->setState('email', $user->email);
                 $this->setState('phone', $user->phone);
                 $this->setState('new', !$user->login_time);
                 $this->setState('userSub', $userSub);
                 $this->setState('packageCode', $package);
                 $this->errorCode = self::ERROR_NONE;
                 $user->login_time = date('Y-m-d H:i:s');
                 $user->save();
             }
         }
     }
     Yii::app()->session[$keySession] = $numberFailLogin;
     if ($numberFailLogin == Yii::app()->params['login']['limit_block']) {
         Yii::app()->session[$keySession . '_time'] = time();
     }
     return !$this->errorCode;
 }