/** * @return boolean * * @throws \cs\web\Exception */ public function action() { if ($this->validate()) { /** @var \app\models\User $user */ $user = Yii::$app->user->identity; // добавляю в диспечер $fields = \app\services\EmailChangeDispatcher::add($user->getId(), $this->email); // отправляю письмо Application::mail($this->email, 'Заявка на смену Email/Логина', 'change_email', ['url' => Url::to(['auth/change_email_activate', 'code' => $fields->getField('code')], true), 'user' => $user]); return true; } else { return false; } }
/** * Страница активации для подтверждения сменя email * * @param string $code код подтверждения * * @return string|\yii\web\Response * * @throws \cs\web\Exception */ public function actionChange_email_activate($code) { $row = EmailChangeDispatcher::find(['code' => $code]); if (is_null($row)) { throw new Exception('Данный код уже активирован или не найден'); } if (Yii::$app->user->isGuest) { /** @var \app\models\User $user */ $user = User::find($row->getField('parent_id')); $user->update(['email' => $row->getField('email')]); Yii::$app->user->login($user); } else { /** @var \app\models\User $user */ $user = Yii::$app->user->identity; $user->update(['email' => $row->getField('email')]); } $row->delete(); return $this->render(); }