Blame view

thread/modules/user/models/form/SignInForm.php 2.21 KB
d1f8bd40   Alexey Boroda   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
85
86
87
88
89
90
  <?php
  
  namespace thread\modules\user\models\form;
  
  use Yii;
  //
  use thread\modules\user\models\Group;
  use yii\helpers\ArrayHelper;
  
  /**
   * Class SignInForm
   *
   * @package thread\modules\user\models
   * @author FilamentV <vortex.filament@gmail.com>
   * @copyright (c), Thread
   */
  class SignInForm extends CommonForm
  {
  
      const FLASH_KEY = 'SignInForm';
  
      public $ONLY_ADMIN = false;
  
      /**
       * @return boolean
       */
      public function login()
      {
          if ($this->validate()) {
              $user = $this->getUser();
              if ($user !== null && $this->ONLY_ADMIN === true) {
                  if ($user['group_id'] != Group::ADMIN) {
                      $this->addError($this->password, Yii::t('user', 'User access is prohibited'));
                  }
              }
              if ($this->validatePassword()) {
                  return Yii::$app->getUser()->login($user, $this->rememberMe ? $this->getTimeRememberUserSignIn() : 0);
              } else {
                  $this->addError($this->password, Yii::t('user', 'Incorrect username or password'));
              }
          }
          return false;
      }
  
      /**
       * @return array
       */
      public function scenarios()
      {
          return ['signIn' => ['username', 'email', 'password', 'rememberMe']];
      }
  
      /**
       * @return array
       */
      public function rules()
      {
          $rules = [
              [['password'], 'required'],
              [['rememberMe'], 'boolean'],
              [['password'], 'validatePassword']
          ];
  
          if ($this->_username_attribute === 'email') {
              $rules[] = [['email'], 'required'];
          } elseif ($this->_username_attribute === 'username') {
              $rules[] = [['username'], 'required'];
          }
  
          return ArrayHelper::merge($rules, parent::rules());
      }
  
      /**
       * Validate password on signIn scenario
       */
      public function validatePassword()
      {
          if (!$this->hasErrors()) {
              $user = $this->getUser();
              if (!$user || !$user->validatePassword($this->password)) {
                  $this->addError('password', Yii::t('user', 'Incorrect username or password'));
                  return false;
              } else {
                  return true;
              }
          }
      }
  
  
  }