['username', 'password'], ]; return array_merge( parent:: scenarios(), $scenarios); } /** * 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, 'Incorrect username or password.'); } } } /** * 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()) { if ($this->getUser()) { $access_token = $this->_user->generateAccessToken(); $this->_user->access_token = $access_token ; $this->_user->save(); return $access_token; } } return false; } /** * Finds user by [[username]] * * @return User|null */ protected function getUser() { if ($this->_user === null) { $this->_user = Admin::findByUsername($this->username); } return $this->_user; } /** * Finds user by [[token]] * * @return User|null */ protected function getToken() { if ($this->_user === null) { $this->_user = Admin::findIdentityByAccessToken($this->token); } return $this->_user; } }