Blame view

protected/modules/admin/models/LoginForm.php 2.54 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
74
75
76
77
78
79
80
81
82
83
84
  <?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' => 'Запомнить компьютер',
              'username' => 'Логин',
              'password' => 'Пароль',
          );
      }
  
      /**
       * Authenticates the password.
       * This is the 'authenticate' validator as declared in rules().
       */
      public function authenticate($attribute, $params)
      {
          $this->_identity = new AdminUserIdentity($this->username, $this->password);
          if (!$this->_identity->authenticate()) {
              switch ($this->_identity->errorCode) {
                  case CUserIdentity::ERROR_USERNAME_INVALID:
                      $this->addError('username', 'Неверное имя');
                      break;
                  case CUserIdentity::ERROR_PASSWORD_INVALID:
                      $this->addError('password', 'Неверный пароль');
                      break;
                  default:
                      $this->addError('username', 'Shit happens');
                      break;
              }
          }
      }
  
      /**
       * 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 AdminUserIdentity($this->username, $this->password);
              $this->_identity->authenticate();
          }
          if ($this->_identity->errorCode === AdminUserIdentity::ERROR_NONE) {
              $duration = $this->rememberMe ? 3600 * 24 * 30 : 0; // 30 days
              Yii::app()->user->login($this->_identity, $duration);
              return true;
          } else
              return false;
      }
  }