• yii 登陆全应用


    1.登陆

    控制器

    <?php
    
    class LoginController extends Controller
    {
    	public $defaultAction = 'login';
    
    	/**
    	 * Displays the login page
    	 */
    	public function actionLogin()
    	{
    		if (Yii::app()->user->isGuest) {     //如果main文件没指定就是CWebUser  可制定为WebUser 然后在Compenont写一个类出来 
    
    			$model=new UserLogin;
    			// collect user input data
    			if(isset($_POST['UserLogin']))
    			{
    				$model->attributes=$_POST['UserLogin'];
    				// validate user input and redirect to previous page if valid
    				if($model->validate()) {
    					$this->lastViset();
    					if (Yii::app()->getBaseUrl()."/index.php" === Yii::app()->user->returnUrl)
    						$this->redirect(Yii::app()->controller->module->returnUrl);
    					else
    						$this->redirect(Yii::app()->user->returnUrl);
    				}
    			}
    			// display the login form
    			$this->render('/user/login',array('model'=>$model));
    		} else
    			$this->redirect(Yii::app()->controller->module->returnUrl);
    	}
    
    
    }
    

      

    UserLogin模型类
    <?php
    
    
    class UserLogin extends CFormModel
    {
    	public $username;
    	public $password;
    	public $rememberMe;
    
    
    	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'),
    		);
    	}
    
    	public function attributeLabels()
    	{
    		return array(
    			'rememberMe'=>UserModule::t("Remember me next time"),
    			'username'=>UserModule::t("username or email"),
    			'password'=>UserModule::t("password"),
    		);
    	}
    
    
    	public function authenticate($attribute,$params)
    	{
    
    		if(!$this->hasErrors())  // we only want to authenticate when no input errors
    		{
    			$identity=new UserIdentity($this->username,$this->password);
    			$identity->authenticate();
    			switch($identity->errorCode)
    			{
    				case UserIdentity::ERROR_NONE:
    					$duration=$this->rememberMe ? Yii::app()->controller->module->rememberMeTime : 0;
    					Yii::app()->user->login($identity,$duration);
    					break;
    				case UserIdentity::ERROR_EMAIL_INVALID:
    					$this->addError("username",'邮箱有误');
    					break;
    				case UserIdentity::ERROR_USERNAME_INVALID:
    					$this->addError("username",UserModule::t("Username is incorrect."));
    					break;
    				case UserIdentity::ERROR_STATUS_NOTACTIV:
    					$this->addError("status",UserModule::t("You account is not activated."));
    					break;
    				case UserIdentity::ERROR_STATUS_BAN:
    					$this->addError("status",UserModule::t("You account is blocked."));
    					break;
    				case UserIdentity::ERROR_PASSWORD_INVALID:
    					$this->addError("password",UserModule::t("Password is incorrect."));
    					break;
    			}
    		}
    	}
    }
    

     

    UserIdentity.php

    <?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 {
    
        private $_id;
    
        const ERROR_EMAIL_INVALID = 3;
        const ERROR_STATUS_NOTACTIV = 4;
        const ERROR_STATUS_BAN = 5;
    
        /**
         * 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() {
            if (strpos($this->username, "@")) {
                $user = User::model()->notsafe()->findByAttributes(array('email' => $this->username));
            } else {
                $user = User::model()->notsafe()->findByAttributes(array('username' => $this->username));
            }
            if ($user === null)
                if (strpos($this->username, "@")) {
                    $this->errorCode = 3;
                } else {
                    $this->errorCode = self::ERROR_USERNAME_INVALID;
                }
            //else if(Yii::app()->getModule('user')->encrypting($this->password)!==$user->password)
            else if (Yii::app()->getModule('user')->encrypting($this->password) == $user->password)
                $this->errorCode = self::ERROR_PASSWORD_INVALID;
            else if ($user->status == 0 && Yii::app()->getModule('user')->loginNotActiv == false)
                $this->errorCode = self::ERROR_STATUS_NOTACTIV;
            else if ($user->status == -1)
                $this->errorCode = self::ERROR_STATUS_BAN;
            else {
                $this->_id = $user->id;
                $this->username = $user->username;
                $this->errorCode = self::ERROR_NONE;
            }
            return !$this->errorCode;
        }
    
        /**
         * @return integer the ID of the user record
         */
        public function getId() {
            return $this->_id;
        }
    
    }
    

      

    User模型类
    <?php
    
    class User extends CActiveRecord {
    
        const STATUS_NOACTIVE = 0;
        const STATUS_ACTIVE = 1;
        const STATUS_BANNED = -1;
    
        //TODO: Delete for next version (backward compatibility)
        const STATUS_BANED = -1;
    
        /**
         * The followings are the available columns in table 'users':
         * @var integer $id
         * @var string $username
         * @var string $password
         * @var string $email
         * @var string $activkey
         * @var integer $createtime
         * @var integer $lastvisit
         * @var integer $superuser
         * @var integer $status
         * @var timestamp $create_at
         * @var timestamp $lastvisit_at
         */
    
        /**
         * Returns the static model of the specified AR class.
         * @return CActiveRecord the static model class
         */
        public static function model($className = __CLASS__) {
            return parent::model($className);
        }
    
        /**
         * @return string the associated database table name
         */
        public function tableName() {
            return Yii::app()->getModule('user')->tableUsers;
        }
    
        /**
         * @return array validation rules for model attributes.
         */
        public function rules() {
            // NOTE: you should only define rules for those attributes that
            // will receive user inputs.CConsoleApplication
            return ((get_class(Yii::app()) == 'CConsoleApplication' || (get_class(Yii::app()) != 'CConsoleApplication' && Yii::app()->getModule('user')->isAdmin())) ? array(
                        array('username', 'length', 'max' => 20, 'min' => 3, 'message' => UserModule::t("Incorrect username (length between 3 and 20 characters).")),
                        array('password', 'length', 'max' => 128, 'min' => 4, 'message' => UserModule::t("Incorrect password (minimal length 4 symbols).")),
                        array('email', 'email'),
                        array('username', 'unique', 'message' => UserModule::t("This user's name already exists.")),
                        array('email', 'unique', 'message' => UserModule::t("This user's email address already exists.")),
                        array('username', 'match', 'pattern' => '/^[A-Za-z0-9_]+$/u', 'message' => UserModule::t("Incorrect symbols (A-z0-9).")),
                        array('status', 'in', 'range' => array(self::STATUS_NOACTIVE, self::STATUS_ACTIVE, self::STATUS_BANNED)),
                        array('superuser', 'in', 'range' => array(0, 1)),
                        array('create_at', 'default', 'value' => date('Y-m-d H:i:s'), 'setOnEmpty' => true, 'on' => 'insert'),
                        array('lastvisit_at', 'default', 'value' => '0000-00-00 00:00:00', 'setOnEmpty' => true, 'on' => 'insert'),
                        array('username, email, superuser, status', 'required'),
                        array('superuser, status', 'numerical', 'integerOnly' => true),
                        array('id, username, password, email, activkey, create_at, lastvisit_at, superuser, status', 'safe', 'on' => 'search'),
                            ) : ((Yii::app()->user->id == $this->id) ? array(
                                array('username, email', 'required'),
                                array('username', 'length', 'max' => 20, 'min' => 3, 'message' => UserModule::t("Incorrect username (length between 3 and 20 characters).")),
                                array('email', 'email'),
                                array('username', 'unique', 'message' => UserModule::t("This user's name already exists.")),
                                array('username', 'match', 'pattern' => '/^[A-Za-z0-9_]+$/u', 'message' => UserModule::t("Incorrect symbols (A-z0-9).")),
                                array('email', 'unique', 'message' => UserModule::t("This user's email address already exists.")),
                                    ) : array()));
        }
    
        /**
         * @return array relational rules.
         */
        public function relations() {
            $relations = Yii::app()->getModule('user')->relations;
            if (!isset($relations['profile']))
                $relations['profile'] = array(self::HAS_ONE, 'Profile', 'user_id');
            return $relations;
        }
    
        /**
         * @return array customized attribute labels (name=>label)
         */
        public function attributeLabels() {
            return array(
                'id' => UserModule::t("Id"),
                'username' => UserModule::t("username"),
                'password' => UserModule::t("password"),
                'verifyPassword' => UserModule::t("Retype Password"),
                'email' => UserModule::t("E-mail"),
                'verifyCode' => UserModule::t("Verification Code"),
                'activkey' => UserModule::t("activation key"),
                'createtime' => UserModule::t("Registration date"),
                'create_at' => UserModule::t("Registration date"),
                'lastvisit_at' => UserModule::t("Last visit"),
                'superuser' => UserModule::t("Superuser"),
                'status' => UserModule::t("Status"),
            );
        }
    
        public function scopes() {
            return array(
                'active' => array(
                    'condition' => 'status=' . self::STATUS_ACTIVE,
                ),
                'notactive' => array(
                    'condition' => 'status=' . self::STATUS_NOACTIVE,
                ),
                'banned' => array(
                    'condition' => 'status=' . self::STATUS_BANNED,
                ),
                'superuser' => array(
                    'condition' => 'superuser=1',
                ),
                'notsafe' => array(
                    'select' => 'id, username, password, email, activkey, create_at, lastvisit_at, superuser, status',
                ),
            );
        }
    
        public function defaultScope() {
            return CMap::mergeArray(Yii::app()->getModule('user')->defaultScope, array(
                        'alias' => 'user',
                        'select' => 'user.id, user.username, user.email, user.create_at, user.lastvisit_at, user.superuser, user.status',
            ));
        }
    }
    

     

    public function scopes() { 
             return array( 
                'published'=>array( 'condition'=>'status=1', ),
                'recently'=>array( 'order'=>'create_time DESC', 'limit'=>5, ), 
    			); 
    		} 
    	}
    $posts=Post::model()->published()->recently()->findAll();
    

      

    public function recently($limit=5) {
    $this->getDbCriteria()->mergeWith(array(
    'order'=>'create_time DESC',
    'limit'=>$limit, )
    );
    return $this;
    }
    $posts=Post::model()->published()->recently(3)->findAll();
    

      

      

     

  • 相关阅读:
    bzoj 1503: [NOI 2004]郁闷的出纳员
    bzoj 1001: [BeiJing2006]狼抓兔子
    bzoj 1005: [HNOI2008]明明的烦恼
    bzoj 1004: [HNOI2008]Cards
    bzoj 1003: [ZJOI2006]物流运输trans
    06day1
    05day2
    04day2
    04day1
    03day2
  • 原文地址:https://www.cnblogs.com/fengzhiqiangcaisangzi/p/3455935.html
Copyright © 2020-2023  润新知