1. Нельзя писать
$this->password = Yii::$app->getSecurity()->generatePasswordHash($this->password);
В методе after/beforeSave(), потому что первый раз предположим $password будет нормальным, а потом вытащив юзера из базы его password уже будет хешем, и сохранив юзера повторно - уже сгенерируется новый хеш пароля из старого хеша пароля, и так далее, короче после второго сохранения пароль пользователя будет совершенно непригодным.
2. Нельзя использовать
$user->update()
в конструкции
if
, потому что $user->update() возвращает не true/false, а количество изменённых строк в БД, но в Yii если модель не изменилась - ничего и не будет обновлено в базе(зачем лишний запрос), просто пишите
$user->save()