• Как грамотно спланировать БД для хранения пользователей?

    @66demon666 Автор вопроса
    Забыл упомянуть, я не то, чтобы JOIN делал, я просто в одной таблице делал столбец принадлежности к другой. Ну вроде как есть users с users_id, есть его инфа в таблице users_info, в которой в каждой строке есть столбец owner_id. Вот это мне кажется не очень верным
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, сейчас работает, опять таки, по неясным причинам. Но уже работает, есть в чем разбираться. Спасибо, оформите как ответ, пожалуйста
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, нашел уязвимое место.

    <?php
    $perem="Привет";
    $hash="$2y$10$CK5ObV4M7EcqPFeEXWc64OtA8rbfmSQ86DZQmSRksqD3ChKBddBJ.";
    if (password_verify($perem,$hash)) {
      echo "true";
    }
    else {
      echo "false";
    }
    echo strlen($hash);
    ?>


    Выводит false и длину хэша 7 символов без каких-либо ошибок. Если же хэш взять в одинарные кавычки, то выводит true и длину хэша 60 символов. Интересно.
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, ну, ситуация не двинулась ни в какую сторону. У меня в таблице есть только passwordHash и я по нему пытаюсь сделать авторизацию, password у меня null и нигде не используется. Я опять не понимаю, в чем проблема. Где можно найти рабочий пример посмотреть?
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, RegisterForm
    <?php
    
    namespace app\models;
    
    use Yii;
    use yii\base\Model;
    
    /**
     * LoginForm is the model behind the login form.
     *
     * @property User|null $user This property is read-only.
     *
     */
    class RegisterForm extends Model
    {
        public $username;
        public $password;
        public $passwordConfirm;
        public $email;
        private $_user = false;
    
    
        /**
         * @return array the validation rules.
         */
        public function rules()
        {
            return [
                [['username', 'email', 'password','passwordConfirm'], 'required','message'=>"Поле обязательно к заполнению"],
                [['username', 'email', 'password','passwordConfirm'], 'trim'],
                [['password'],'string', 'length'=>[6,12],'message'=>"Пароль должен содержать от 6 до 12 символов"],
                [['username'],'string', 'length'=>[4,12],'message'=>"Логин должен содержать от 4 до 12 символов"],
                [['username'],'unique', 'targetAttribute'=>"username","targetClass"=>"app\models\User", 'message'=>"Этот логин уже занят"],
                [['email'],'unique', 'targetAttribute'=>"email","targetClass"=>"app\models\User", 'message'=>"Эта почта уже зарегистрирована"],
                ['password', 'compare', 'compareAttribute' => 'passwordConfirm','message'=>"Пароли не совпадают"],
                ['email','email','message'=>"Некорректный email"],
            ];
        }
    
        public function attributeLabels() {
          return [
            'username'=>'Логин',
            'password'=>'Пароль',
            'passwordConfirm'=>'Подтверждение пароля',
            'email'=>'Email',
          ];
        }
    
        /**
         * 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
         */
    
    
        /**
         * Logs in a user using the provided username and password.
         * @return bool whether the user is logged in successfully
         */
        public function register()
        {
          if ($this->validate()) {
            $user=new User;
            $user->username=$this->username;
            $user->email=$this->email;
            $user->save();
            return true;
          }
          else {
            return false;
          }
    
        }
    
        /**
         * Finds user by [[username]]
         *
         * @return User|null
         */
        public function getUser()
        {
            if ($this->_user === false) {
                $this->_user = User::findByUsername($this->username);
            }
    
            return $this->_user;
        }
    }


    LoginForm
    <?php
    
    namespace app\models;
    
    use Yii;
    use yii\base\Model;
    
    /**
     * LoginForm is the model behind the login form.
     *
     * @property User|null $user This property is read-only.
     *
     */
    class LoginForm extends Model
    {
        public $username;
        public $password;
        public $rememberMe = true;
    
        private $_user = false;
    
    
        /**
         * @return array the validation rules.
         */
        public function rules()
        {
            return [
                // username and password are both required
                [['username', 'password'], 'required','message'=>'Поле не заполнено'],
                // rememberMe must be a boolean value
                ['rememberMe', 'boolean'],
                // password is validated by validatePassword()
                ['password', 'validatePassword'],
            ];
        }
    
        public function attributeLabels() {
          return [
            'username'=>'Логин',
            'password'=>'Пароль'
          ];
        }
    
    
        /**
         * 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, 'Неправильные учетные данные');
                }
            }
        }
    
        /**
         * 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);
            }
            return false;
        }
    
        /**
         * Finds user by [[username]]
         *
         * @return User|null
         */
        public function getUser()
        {
            if ($this->_user === false) {
                $this->_user = User::findByUsername($this->username);
            }
            return $this->_user;
        }
    }


    User
    <?php
    
    namespace app\models;
    
    use Yii;
    use yii\base\NotSupportedException;
    use yii\db\ActiveRecord;
    use yii\web\IdentityInterface;
    
    class User extends \yii\db\ActiveRecord  implements IdentityInterface
    {
    public static function tableName(){
    return "users";
    }
    
    public static function findIdentity($id) {
      return static::findOne($id);
    }
    
    public static function findIdentityByAccessToken($token, $type = null)
     {
         return static::findOne(['access_token' => $token]);
     }
    
     /**
      * @return int|string current user ID
      */
     public function getId()
     {
         return $this->id;
     }
    
     public function findByUsername($username) {
       return static::findOne(["username"=>$username]);
     }
     /**
      * @return string current user auth key
      */
     public function getAuthKey()
     {
         return $this->authKey;
     }
    
     /**
      * @param string $authKey
      * @return bool if auth key is valid for current user
      */
     public function validateAuthKey($authKey)
     {
         return $this->getAuthKey() === $authKey;
    }
    
    public function validatePassword($password)
    {
      return $this->paswordHash==$password;
    }
    
    public function setPassword($password)
    {
        $this->passwordHash=\Yii::$app->getSecurity()->generatePasswordHash($password);
    }
    
    
    public function beforeSave($insert)
       {
           if (parent::beforeSave($insert)) {
               if ($this->isNewRecord) {
                   $this->authKey = \Yii::$app->security->generateRandomString();
                   $this->setPassword($this->password);
               }
               return true;
           }
           return false;
       }
    
    }


    За уровень ошибок - не менял после установки
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, Так вот дело в том, что всё изначально в этомвиде и было (в начале вопроса)
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, я вас не обманываю, вот, об этом не написано
    5d923d945c8eb232846017.png

    Если это метод в User непонятно, почему неправильная модель логина, ведь она вызывает ValidatePassword где вся проверка и происходит

    Если это метод в модели, то тогда я вообще не понимаю.
    (модель)
    public function validatePassword($attribute, $params)
        {
            if (!$this->hasErrors()) {
                $user = $this->getUser();
    
                if (!$user || !Yii::$app->getSecurity()->validatePassword($password, $user->passwordHash)) {
                    $this->addError($attribute, 'Неправильные учетные данные');
                }
            }
        }
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, так, метод \Yii::$app->getSecurity()->validatePassword должен вызываться в User? Потому что я привел код из модели логина.
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, я от стандарта и не отходил
    public function validatePassword($attribute, $params)
        {
            if (!$this->hasErrors()) {
                $user = $this->getUser();
    
                if (!$user || !$user->validatePassword($this->password)) {
                    $this->addError($attribute, 'Неправильные учетные данные');
                }
            }
        }
    
        /**
         * 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);
            }
            return false;
        }
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий,
    public function validatePassword($password)
    {
        if (\Yii::$app->getSecurity()->validatePassword($password, $this->passwordHash)) {
          return true;
        }
        else {
          return false;
        }
    }
    
    public function setPassword($password)
    {
        $this->passwordHash=\Yii::$app->getSecurity()->generatePasswordHash($password);
    }
    
    
    public function beforeSave($insert)
       {
           if (parent::beforeSave($insert)) {
               if ($this->isNewRecord) {
                   $this->authKey = \Yii::$app->security->generateRandomString();
                   $this->setPassword($this->password);
               }
               return true;
           }
           return false;
       }
    
    }

    5d923515da558349094528.png

    а если бы заглянули, то увидели, что всё давно за Вас сделано, с применением и password_hash() и password_verify()

    Весь гугл забит этим одним и тем же примером, который у меня по каким-то причинам не пашет
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, так я пробовал, та же песня
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, потому что я не знаю, что именно я не понял, логику работы с функцией или реализацию в yii. Неочевидно, да?
  • Авторизация с хэшированым паролем в Yii2?

    @66demon666 Автор вопроса
    Дмитрий, конечно не заглядывал, это к yii никакого отношения почти и не имеет. Делюсь
  • Как организовать парсер данных с vk api?

    @66demon666
    Makssof, просто слышал байку, что если получить например standalone токен для сервера, то за это могут жестоко покарать, но если честно не совсем понимаю как именно.
  • Как организовать парсер данных с vk api?

    @66demon666
    Этот параметр доступен только для Standalone, просто к слову
  • Yii2 почему не работает подключение стилей?

    @66demon666 Автор вопроса
    Дмитрий, забудем мои слова про глупые ошибки, однако я не думал что теги beginPage и beginBody имеют такое значение
  • Yii2 почему не работает подключение стилей?

    @66demon666 Автор вопроса
    Дмитрий, он не подключает вообще никакие стили, по какой-то причине
  • Yii2 почему не работает подключение стилей?

    @66demon666 Автор вопроса
    Дмитрий, мне таки кажется что дело в
    'grozzzny\depends\bootstrap4\Bootstrap4Asset',
            'grozzzny\depends\bootstrap4\Bootstrap4PluginAsset
  • Yii2 почему не работает подключение стилей?

    @66demon666 Автор вопроса
    Дмитрий,
    <?php
    
    /* @var $this \yii\web\View */
    /* @var $content string */
    
    use yii\helpers\Html;
    use app\assets\ProfileAsset;
    
    ProfileAsset::register($this);
    ?>
    <?php $this->beginPage() ?>
    <!DOCTYPE html>
    <html>
    	<head>
    	   <meta charset="<?= Yii::$app->charset ?>">
         <meta http-equiv="X-UA-Compatible" content="IE=edge">
         <?php $this->registerCsrfMetaTags() ?>
    		 <title><?= Html::encode($this->title) ?></title>
         <?php $this->head() ?>
    	</head>
      <body>
      <?php $this->beginBody() ?>
      <div class="overlay"></div>
      <?=$content?>
      <?php $this->endBody() ?>
    
    </body>
      </html>
      <?php $this->endPage() ?>


    5d87e980d7fbf872518241.png
  • Yii2 почему не работает подключение стилей?

    @66demon666 Автор вопроса
    Дмитрий, да, есть стандартный шаблон и шаблон landing, вся верстка подгружается верно, не подключаются только стили.
    $this->layout="profile";
            return $this->render("test",array("data"=>"sadsadas"));