Yii Framework Forum: Autenticação Lenta - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Autenticação Lenta Rate Topic: -----

#1 User is offline   Edson Rodrigues 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 378
  • Joined: 10-August 10

Posted 27 October 2013 - 02:41 PM

Olá Brodis,

Estou com um problema na minha autenticação.. o caso é que est funcionando tudo certinho o problema é que esta lento para autenticar.

Quando faço login demora em torno de 5 a 10 segundos... estou testando local.

O que pode ser que esta dando este gargalo.

Alguém já teve este problema?

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 $email;
	public $password;
        public $rememberMe;
        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(
		array('email, password', 'required'),
		array('email', 'email'),
		array('password', 'authenticate'),
                array('rememberMe', 'boolean'),

             

	);
}

	/**
	 * Declares attribute labels.
	 */
	public function attributeLabels()
	{
		return array(
                    'email'=>'E-mail',
                    'password'=>'Senha',
		);
	}
        
         public function checkEnabled($attribute,$params)
        {
                if(!$this->$attribute == $params['enabledValue'])
                {
                        $this->addError('username','E-mail bloqueado ou Inválido');
                }       
        }

	/**
	 * Authenticates the password.
	 * This is the 'authenticate' validator as declared in rules().
	 */
	public function authenticate($attribute,$params)
	{
		if(!$this->hasErrors())  // we only want to authenticate when no input errors
		{
			$identity=new UserIdentity($this->email,$this->password);
			$identity->authenticate();
			switch($identity->errorCode)
			{
				case UserIdentity::ERROR_NONE:
                                        $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
                                        Yii::app()->user->login($identity,$duration);
					break;
				case UserIdentity::ERROR_USERNAME_INVALID:
					$this->addError('email','E-mail Inválido');
					break;
                                case UserIdentity::ERROR_PASSWORD_INVALID:
					$this->addError('password','Senha Inválida');
					break;
                                 case UserIdentity::ERROR_PASSWORD_STATUS:
					$this->addError('password','Usuário Bloquedo pelo Administrador');
					break;
				default: // UserIdentity::ERROR_PASSWORD_INVALID
					$this->addError('password','Senha Inválida');
					break;
			}
		}
	}
        
        public function login()
	{
		if($this->_identity===null)
		{
			$this->_identity=new UserIdentity($this->email,$this->password);
			$this->_identity->authenticate();
		}
		if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
		{
                        $duration=(Yii::app()->user->allowAutoLogin && $this->rememberMe) ? 3600*24*30 : 0;
                         // log user in and save in session all appended data
                        Yii::app()->user->login($this->_identity,$duration);
		//	$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
		//	Yii::app()->user->login($this->_identity,$duration);
			return true;
		}
		else
			return false;
	}
}


useridentify
<?php

/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity
{

	 // Need to store the user's ID:
	 private $_id;


	/**
	 * Authenticates a user.
	 * The example implementation makes sure if the username and password
	 * are both 'demo'.
	 * In practical applications, this should be changed to authenticate
	 * against some persistent user identity storage (e.g. database).
	 * @return boolean whether authentication succeeds.
	 */
	public function authenticate()
	{
		$user = Usuario::model()->findByAttributes(array('email'=>$this->username));

		if ($user===null) 
			$this->errorCode=self::ERROR_USERNAME_INVALID;
		else if ($user->password !== md5($this->password) ) 
			$this->errorCode=self::ERROR_PASSWORD_INVALID;
                else if($user->status==0)
                         $this->errorCode=self::ERROR_PASSWORD_STATUS;
		else { 
		    $this->errorCode=self::ERROR_NONE;
		    // Store the role in a session:
		    $this->setState('nivel', $user->nivel);
                    $this->setState('nome', $user->nome);
                    $this->_id = $user->id;
                    $_SESSION['logado'] = true;
                    
		}
		return !$this->errorCode;
	}
	
	public function getId()
	{
	 return $this->_id;
	}

	
}


main
<?php

$backend=dirname(dirname(__FILE__));
$frontend=dirname($backend);
Yii::setPathOfAlias('backend', $backend);

$frontendArray=require($frontend.'/config/main.php');

Yii::setPathOfAlias('bootstrap', dirname(__FILE__).'/../extensions/bootstrap');

// This is the main Web application backend configuration. Any writable
// CWebApplication properties can be configured here.
$backendArray=array(
    'basePath' => $frontend,
    'language'=>'pt_br',
    'name'=>'Sistema Administrativo - EProdesq',
    'controllerPath' => $backend.'/controllers',
    'viewPath' => $backend.'/views',
    'runtimePath' => $backend.'/runtime',
    
    'preload'=>array('log','bootstrap'),

    // autoloading model and component classes
    'import'=>array(
        'backend.models.*',
        'backend.components.*',
        'backend.CA_Framework.*',
        'application.models.*',
        'application.components.*',
        'application.extensions.*',
    ),
    'aliases' => array(
            
         'xupload' => 'backend.extensions.xupload',
    ),



    'modules'=>array(
        'gii'=>array(
          //  'class'=>'backend.extensions.gii-sisadm.GiiModule',
            'password'=>'a12b25',
            'generatorPaths'=>array(
                'bootstrap.gii'
             //   'application.backend.extensions.bootstrap.gii', // since 0.9.1
            ),

                     
        ),
    ),

    // main is the default layout
    'layout'=>'main',
    // alternate layoutPath
    'layoutPath'=>dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'layouts'.DIRECTORY_SEPARATOR,

    // application-level parameters that can be accessed
    // using Yii::app()->params['paramName'] and MParams class
    	
    'params'=>require(dirname(__FILE__).'/parametros.php'),

    // application components
    'homeUrl'=>array('home/index'),
    'components'=>array(
        'image'=>array(
            'class'=>'application.backend.extensions.image.CImageComponent',
            // GD or Imagick
            'driver'=>'GD',
        ),
        
         'clientScript'=>array(
            'coreScriptPosition' => CClientScript::POS_HEAD,
                  'scriptMap' => array(
                        'jquery.js'=>false,  //disable default implementation of jquery
                       'jquery.min.js'=>false,  //desable any others default implementation
                        'core.css'=>false, //disable
                        'styles.css'=>false,  //disable
                        'pager.css'=>false,   //disable
                        'default.css'=>false,  //disable
                        'jquery.ba-bbq.js'=>false, 
                        'jquery.yiiactiveform.js'=>false,
                         )
        ),
        'user'=>array(
                    'class' => 'WebUser',
	             'allowAutoLogin'=>true,
                    'loginUrl'=>array('/sisadm/'),
				    'stateKeyPrefix' => 'd18e09c74efe6c1b55e135',
                                   
                    
	        ),
        
         'bootstrap'=>array(
                        'class'=>'backend.extensions.bootstrap.components.Bootstrap', // assuming you extracted bootstrap under extensions
                       
                        'plugins'=>array(
                            // Optionally you can configure the "global" plugins (button, popover, tooltip and transition)
                            // To prevent a plugin from being loaded set it to false as demonstrated below
                            'transition'=>true, // disable CSS transitions
                            'popover'=>array(
                                'selector'=>'.dica, img[rel="popover"]',
                              'options'=>array(
                                  
                                  'placement'=>'bottom'
                              ),  
                            ),
                            'tooltip'=>array(
                                'selector'=>'a[rel="tooltip"],img[rel="tooltip"]', // bind the plugin tooltip to anchor tags with the 'tooltip' class
                                'options'=>array(
                                 'placement'=>'top', // place the tooltips below instead
                                ),
                            ),
                            // If you need help with configuring the plugins, please refer to Bootstrap's own documentation:
                            // http://twitter.github.com/bootstrap/javascript.html
                        ),                
                    ),
        
        'urlManager'=>array(
            'urlSuffix'=> '',
            'showScriptName'=>false,
            'caseSensitive'=>false,
            'rules'=>require(dirname(__FILE__).'/rotas.php'),
        ),
        		'log'=>array(
                    'class'=>'CLogRouter',
                    'routes'=>array(

                        array(
                            'class'=>'CFileLogRoute',
                            'levels'=>'trace, info',
                            'categories'=>'system.*'
                        ),
//                        array(
//                            'class'=>'CEmailLogRoute',
//                            'levels'=>'error, warning',
//                            'emails'=>'suporte@setequatro.com.br',
//                        ),

                        ),
                            ),

    ),

 
);

if(!function_exists('w3_array_union_recursive'))
{
    /**
     * This function does similar work to $array1+$array2,
     * except that this union is applied recursively.
     * @param array $array1 - more important array
     * @param array $array2 - values of this array get overwritten
     * @return array
     */
    function w3_array_union_recursive($array1,$array2)
    {
        $retval=$array1+$array2;
        foreach($array1 as $key=>$value)
        {
            if(is_array($array1[$key]) && is_array($array2[$key]))
                $retval[$key]=w3_array_union_recursive($array1[$key],$array2[$key]);
        }
        return $retval;
    }
}

return w3_array_union_recursive($backendArray,$frontendArray);
?>


0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users