Blame view

common/models/LoginForm.php 2.42 KB
e88babfd   Yarik   v0.0.2-stable
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
85
86
87
88
89
90
  <?php
      namespace common\models;
      
      use artbox\core\models\User;
      use Yii;
      use yii\base\Model;
      
      /**
       * Login form
       */
      class LoginForm extends Model
      {
          public $username;
          public $password;
          public $rememberMe = true;
          
          private $_user;
          
          /**
           * @inheritdoc
           */
          public function rules()
          {
              return [
                  // username and password are both required
                  [
                      [
                          'username',
                          'password',
                      ],
                      'required',
                  ],
                  // rememberMe must be a boolean value
                  [
                      'rememberMe',
                      'boolean',
                  ],
                  // password is validated by validatePassword()
                  [
                      'password',
                      'validatePassword',
                  ],
              ];
          }
          
          /**
           * Validates the password.
           * This method serves as the inline validation for password.
           *
           * @param string $attribute the attribute currently being validated
           * @param array  $params    the additional name-value pairs given in the rule
           */
          public function validatePassword($attribute, $params)
          {
              if (!$this->hasErrors()) {
                  $user = $this->getUser();
                  if (!$user || !$user->validatePassword($this->password)) {
                      $this->addError($attribute, 'Incorrect username or password.');
                  }
              }
          }
          
          /**
           * Logs in a user using the provided username and password.
           *
           * @return bool whether the user is logged in successfully
           */
          public function login()
          {
              if ($this->validate()) {
                  return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
              } else {
                  return false;
              }
          }
          
          /**
           * Finds user by [[username]]
           *
           * @return User|null
           */
          protected function getUser()
          {
              if ($this->_user === null) {
                  $this->_user = User::findByUsername($this->username);
              }
              
              return $this->_user;
          }
      }