Blame view

common/models/LoginForm.php 2.98 KB
0060a4ca   Anastasia   first commit
1
2
3
  <?php
      namespace common\models;
  
0060a4ca   Anastasia   first commit
4
5
6
7
8
9
10
11
      use Yii;
      use yii\base\Model;
  
      /**
       * Login form
       */
      class LoginForm extends Model
      {
8f340aa7   Anastasia   - main page
12
          public $email;
0060a4ca   Anastasia   first commit
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
          public $password;
          public $rememberMe = true;
          public $returnUrl;
      
          private $_user;
      
          /**
           * @inheritdoc
           */
          public function rules()
          {
              return [
                  // username and password are both required
                  [
                      [
8f340aa7   Anastasia   - main page
28
                          'email',
0060a4ca   Anastasia   first commit
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
                          'password',
                      ],
                      'required',
                  ],
                  [
                      [
                          'returnUrl',
                      ],
                      'string',
                  ],
                  // rememberMe must be a boolean value
                  [
                      'rememberMe',
                      'boolean',
                  ],
                  // password is validated by validatePassword()
                  [
                      'password',
                      'validatePassword',
                  ],
8f340aa7   Anastasia   - main page
49
50
51
52
                  [
                      'email',
                      'email'
                  ]
0060a4ca   Anastasia   first commit
53
54
55
56
57
58
59
60
61
62
63
64
65
              ];
          }
      
          /**
           * 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()) {
8f340aa7   Anastasia   - main page
66
67
68
                  /**
                   *
                   */
0060a4ca   Anastasia   first commit
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
                  $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]]
           *
8f340aa7   Anastasia   - main page
93
           * @return \common\models\Author|null
0060a4ca   Anastasia   first commit
94
95
96
97
           */
          protected function getUser()
          {
              if ($this->_user === null) {
8f340aa7   Anastasia   - main page
98
                  $this->_user = Author::findByUsername($this->email);
0060a4ca   Anastasia   first commit
99
100
101
102
103
104
105
106
107
108
109
110
111
112
              }
      
              return $this->_user;
          }
      
          public function attributeLabels()
          {
              return [
                  'username'      =>  Yii::t('app', 'Логин'),
                  'password'      =>  Yii::t('app', 'Пароль'),
                  'rememberMe'    =>  Yii::t('app', 'Запомнить'),
              ];
          }
      }