Задать вопрос
  • Yii2 RETSful API почему Method Not Allowed?

    @66demon666 Автор вопроса
    А я никогда не гуглю перед тем как вопрос задать
  • Как приложение узнает заряд наушников?

    @66demon666
    Олег, если конечно наушники такой броадкаст рассылают
  • Yii2 RESTful API зачем использовать Search модели?

    @66demon666 Автор вопроса
    Denis, то есть если нужно просто отдавать данные в JSON это не нужно?
  • Как подружить Yii2 и Bootstrap4?

    @66demon666 Автор вопроса
    Dmitry Bay, я отключил расширение от grozzzny
  • Как подружить Yii2 и Bootstrap4?

    @66demon666 Автор вопроса
    Я заменил это в composer.json, выполнил composer update, удалил из depend всё что там было (то расширение) и бутстрап вообще слетел. Его подключать надо как-то?
  • Как сделать сохранение данных пользователей?

    @66demon666
    KBA3, конечно. С питоном не работал, но это не суть вообще. Вам нужен сервер (я полагаю, он есть), на нем нужна любая БД, стандарт MySQL. Туда бот записывает известных ему юзеров и там же хранит их репутацию и вообще что угодно о них, что вы хотите реализовать.
  • Настройка редиректов?

    @66demon666
    Извините что не даю прямого ответа, но насколько мне известно поисковики редиректы не любят от слова совсем и могу как минимум сильно опустить сайт в выдаче, как максимум черные списки. Зачем вам старый?
  • Yii2 получать данные из двух таблиц сразу?

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

    @66demon666 Автор вопроса
    Дмитрий, я в принципе читал как это делать, просто узнавал что правильнее.

    (лучше в виде ответа последний комментарий)
  • Yii2 получать данные из двух таблиц сразу?

    @66demon666 Автор вопроса
    Дмитрий, то есть все 3 способа имеют право на существование. Но не будет ли "работа с 2 моделями в контроллере" нарушать принцип (точнее, смысл) MVC архитектуры? Для наглядности я распишу что имел ввиду:

    Таблица Users:
    user_id
    Прочие поля

    Таблица Users_info:
    info_id
    user_id (к какому пользователю принадлежит)
    Прочие поля

    А в контроллере получать user_id, а затем из 2 модели users_info выдергивать нужную запись. Мне кажется всё-таки правильнее переместить всю эту логику в модели.
    (точнее, я где-то об этом читал)
  • Как спарсить после подтверждения авторизации redirect_uri?

    @66demon666
    В PHP указывается в redirect_uri на свой же адрес, и просто парсится, в питоне хз
  • Как грамотно спланировать БД для хранения пользователей?

    @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? Потому что я привел код из модели логина.