2016-07-26 107 views
0

有一种方法(在models/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

in findByUsername函数我用这个覆盖默认代码:$ user = Utente :: find() - > where(['username'=> $ username]) - >酮();但是当我尝试登录时,出现此错误:调用未知方法:app \ models \ Utente :: validatePassword() – mariobros

+1

如果您正在查找DB用户实现,则可以从高级模板复制和修改用户模型。 – 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 \ User :: login()必须实现接口yii \ web \ IdentityInterface,应用程序实例\ models \ Utente给出,在第73行调用C:\ Program Files(x86)\ myproject \ models \ LoginForm.php并定义为 问题似乎在里面:return Yii :: $ app-> user-> login($ this- > getUser(),$ this-> rememberMe?3600 * 24 * 30:0); – mariobros

+0

你是否以这种方式实现你的类:'class User extends \ yii \ db \ ActiveRecord implements \ yii \ web \ IdentityInterface { ... } '??? – yafater

+0

是的,我已经编辑模型/ User.php并以您建议的方式实现Class。 – mariobros