Blame view

protected/models/LoginForm.php 2.05 KB
a1684257   Administrator   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  <?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 $username;
      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(
              // 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'),
          );
      }
  
      /**
       * Declares attribute labels.
       */
      public function attributeLabels()
      {
          return array(
              'rememberMe' => 'Remember me next time',
          );
      }
  
      /**
       * Authenticates the password.
       * This is the 'authenticate' validator as declared in rules().
       */
      public function authenticate($attribute, $params)
      {
          if (!$this->hasErrors()) {
              $this->_identity = new UserIdentity($this->username, $this->password);
              if (!$this->_identity->authenticate())
                  $this->addError('password', 'Incorrect username or password.');
          }
      }
  
      /**
       * Logs in the user using the given username and password in the model.
       * @return boolean whether login is successful
       */
      public function login()
      {
          if ($this->_identity === null) {
              $this->_identity = new UserIdentity($this->username, $this->password);
              $this->_identity->authenticate();
          }
          if ($this->_identity->errorCode === UserIdentity::ERROR_NONE) {
              $duration = $this->rememberMe ? 3600 * 24 * 30 : 0; // 30 days
              Yii::app()->user->login($this->_identity, $duration);
              return true;
          } else
              return false;
      }
  }