2016-07-26 3 views
0

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

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', 
     ], 
    ]; 
+1

Что вы имеете в виду? Вы можете изменить эту таблицу с тем, что хотите ... – Bizley

+0

в функции findByUsername я переопределил код по умолчанию: $ user = Utente :: find() -> где (['username' => $ username]) -> один(); но когда я пытаюсь войти в систему, я получаю эту ошибку: вызов неизвестного метода: app \ models \ Utente :: validatePassword() – mariobros

+1

Если вы ищете реализацию пользователей БД, вы можете скопировать и изменить модель пользователя из расширенного шаблона. – Bizley

ответ

0

вы должны реализовать класс пользователей из \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; 
    } 
+0

спасибо за предложение, похоже, работает частично, потому что после входа в систему я получаю эту ошибку: Аргумент 1 передан yii \ web \ Пользователь :: login() должен реализовать интерфейс yii \ web \ IdentityInterface, экземпляр приложения \ models \ Utente, вызванный в C: \ Program Files (x86) \ myproject \ models \ LoginForm.php в строке 73 и определен Проблема, кажется, внутри: return Yii :: $ app-> user-> login ($ this- > getUser(), $ this-> rememberMe? 3600 * 24 * 30: 0); – mariobros

+0

Вы реализуете свой класс следующим образом: 'class User extends \ yii \ db \ ActiveRecord реализует \ yii \ web \ IdentityInterface { ... } ' ??? – yafater

+0

Да, я редактировал модели/User.php и реализую класс, который вы предлагаете. – mariobros

Смежные вопросы