Yii2 динамически создает пользователей по умолчанию

Есть ли способ (в models/User.php) заменить пользователей Yii по умолчанию (например, admin, demo и т. д.) именем пользователя и паролем моей пользовательской таблицы?

    private static $users = [
      '100' => [
        'id' => '100',
        'username' => 'admin',
        'password' => 'admin',
        'authKey' => 'test100key',
        'accessToken' => '100-token',
      ],
      '101' => [
        'id' => '101',
        'username' => 'demo',
        'password' => 'demo',
        'authKey' => 'test101key',
        'accessToken' => '101-token',
      ],
    ];

person mariobros    schedule 26.07.2016    source источник
comment
Что ты имеешь в виду? Вы можете изменить эту таблицу, как хотите...   -  person Bizley    schedule 26.07.2016
comment
в функции findByUsername я заменил код по умолчанию следующим образом: $user = Utente::find()-›where(['username' =› $username])-›one(); но когда я пытаюсь войти в систему, я получаю эту ошибку: Вызов неизвестного метода: app\models\Utente::validatePassword()   -  person mariobros    schedule 26.07.2016
comment
Если вы ищете реализацию пользователей БД, вы можете скопировать и изменить модель пользователя из расширенного шаблона.   -  person Bizley    schedule 26.07.2016


Ответы (1)


вы должны реализовать свой класс пользователей из \yii\web\IdentityInterface и реализовать эти функции

    public static function findIdentity($id) {

        $model = self::findOne(['users_id' => $id]);

        return ($model ? new static($model) : NULL);
    }

    public static function findIdentityByAccessToken($token, $type = null) {
        return null;
    }

    public function getId() {
        return $this->users_id;
    }

    public function getAuthKey() {
        return FALSE;
    }

    public function validateAuthKey($authKey) {

    }
public static function findByid($id) {

    return self::findOne(['users_id' => $id]);
}

public function validatePassword($password) {
    return Yii::$app->security->validatePassword($password, $this->uusers_password);
}

public function setPassword($password) {
    $this->password_hash = Yii::$app->security->generatePasswordHash($password);
}

и измените форму входа, чтобы получить пользователей из базы данных

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 = Users::findByid($this->username);
        }

        return $this->_user;
    }
person Zahra Jalali    schedule 26.07.2016
comment
спасибо за предложение, кажется, работает частично, потому что после входа в систему я получаю эту ошибку: аргумент 1, переданный в yii\web\User::login(), должен реализовывать интерфейс yii\web\IdentityInterface, указан экземпляр app\models\Utente, вызывается в C:\Program Files (x86)\myproject\models\LoginForm.php в строке 73 и определяется Проблема, похоже, внутри: return Yii::$app-›user-›login($this-›getUser(), $this-›rememberMe ? 3600 * 24 * 30 : 0); - person mariobros; 27.07.2016
comment
Вы реализуете свой класс таким образом: class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface{ ... } ??? - person Zahra Jalali; 27.07.2016
comment
Да, я отредактировал models/User.php и реализовал класс так, как вы предложили. - person mariobros; 27.07.2016