/** * User account */ public function actionIndex() { /** @var User $user */ // get user $user = $this->jwtAuth->getAuthenticatedUser(); $user->setScenario("account"); // check for post input errors $loadedAndValidated = $user->loadPostAndValidate(); if ($loadedAndValidated === false) { return ["errors" => $user->errors]; } // process account update or find a $userToken (for pending email confirmation) $userToken = null; if ($loadedAndValidated) { // check if user changed his email $newEmail = $user->checkEmailChange(); if ($newEmail) { $userToken = UserToken::generate($user->id, UserToken::TYPE_EMAIL_CHANGE, $newEmail); $user->sendEmailConfirmation($userToken); } $user->save(false); } else { $userToken = UserToken::findByUser($user->id, UserToken::TYPE_EMAIL_CHANGE); } $hasPassword = (bool) $user->password; return ["success" => ["user" => $user, "userToken" => $userToken, "hasPassword" => $hasPassword]]; }
/** * Register */ public function actionRegister() { $user = new User(["scenario" => "register"]); $profile = new Profile(); // ensure that both models get validated for errors $userValidate = $user->loadPostAndValidate(); $profileValidate = $profile->loadPostAndValidate(); if (!$userValidate || !$profileValidate) { return ["errors" => array_merge($user->errors, $profile->errors)]; } // create user/profile $user->setRegisterAttributes(Role::ROLE_USER)->save(false); $profile->setUser($user->id)->save(false); // determine userToken type to see if we need to send email $userTokenType = null; if ($user->status == $user::STATUS_INACTIVE) { $userTokenType = UserToken::TYPE_EMAIL_ACTIVATE; } elseif ($user->status == $user::STATUS_UNCONFIRMED_EMAIL) { $userTokenType = UserToken::TYPE_EMAIL_CHANGE; } // check if we have a userToken type to process, or just generate jwt data if ($userTokenType) { $userToken = UserToken::generate($user->id, $userTokenType); $user->sendEmailConfirmation($userToken); return ["success" => ["userToken" => 1]]; } else { $request = Yii::$app->request; $rememberMe = $request->post("rememberMe", true); $jwtCookie = $request->post("jwtCookie", true); return ["success" => $this->generateAuthSuccess($user, $rememberMe, $jwtCookie)]; } }