Changes
Title
unchanged
Using multiple models in an identity
Category
unchanged
How-tos
Yii version
unchanged
2.0
Tags
changed
authentication,identity
Content
changed
[...]
}
public function validatePassword($password)
{
return password_verify($password, $this->_passwordHash);
}
public static function findByUsername(username)
{
$model = Customer::find()->where(['username' => $username])->one();
if (!$model) {
$model = Supplier::find()->where(['username' => $username])->one();
}
if (!$model) {
return false;
}
if ($model instanceof Customer) {
$type = self::TYPE_CUSTOMER;
} else {
$type = self::TYPE_SUPPLIER;
}
$identity = new Identity();
$identity->_id = $type . '-' . $model->id;
$identity->_authkey = $model->authkey;
$identity->_passwordHash = $model->password_hash;
return $identity;
}
public static function findIdentityByEmail($email)[...]
In the above we assume that our ids are like `customer-23` or `supplier-34`. When we need to get identity instance we split the id by `-` and getting both type and integer id for the model corresponding to that type.
Having identity we can tell Yii to use it via `confing/main.php`:
```php[...]
{
if ($this->_user === false) {
$this->_user = Identity::findIdentityByEmailByUsername($this->username);
}
return $this->_user;
}
}[...]