public function saveData() { if ($this->model->load(Yii::$app->request->post())) { if (Yii::$app->request->isAjax) { Yii::$app->response->format = Response::FORMAT_JSON; // perform AJAX validation echo ActiveForm::validate($this->model); Yii::$app->end(); return ''; } /** @var User|bool $registeredUser */ $registeredUser = $this->model->register(); if ($registeredUser !== false) { $module = UsersModule::module(); // login registered user if there's no need in confirmation $shouldLogin = $module->allowLoginInactiveAccounts || $module->emailConfirmationNeeded === false; if ($module->emailConfirmationNeeded === true && $registeredUser->is_active) { $shouldLogin = true; } if ($shouldLogin && $registeredUser->login(UsersModule::module()->loginDuration)) { $returnUrl = Yii::$app->request->get('returnUrl'); if ($returnUrl !== null) { return $this->controller->redirect($returnUrl); } } return $this->controller->goBack(); } } return ''; }
/** * Validates form and logs the user in. * * @return bool whether the user is logged in successfully */ public function login() { $module = UsersModule::module(); if ($this->validate()) { return $this->user->login($this->rememberMe ? $module->loginDuration : 0); } else { return false; } }
public function socialRegistrationScenario(RegistrationForm &$registrationForm, BaseClient &$client) { if (empty($registrationForm->username)) { $registrationForm->generateUsername($client->getUserAttributes()); $registrationForm->username_is_temporary = true; } if (empty($registrationForm->password)) { $registrationForm->password = PasswordHelper::generate(UsersModule::module()->generatedPasswordLength); } }
/** * Adds validation rule to not accept inactive users if such feature is toggled on in module configuration. * * @param \DevGroup\Users\models\LoginForm $loginForm * * @return array */ protected function inactiveUsers(LoginForm &$loginForm) { if (UsersModule::module()->allowLoginInactiveAccounts === false) { return []; } return ['username', function ($attribute) use(&$loginForm) { if ($loginForm->user !== null && $loginForm->user->is_active === false) { $loginForm->addError($attribute, Yii::t('users', 'You need to confirm your email address')); } }]; }
public function socialRegister(BaseClient &$client) { UsersModule::module()->authorizationScenario()->socialRegistrationScenario($this, $client); if (!$this->validate()) { return false; } /** @var User $user */ $user = Yii::createObject(ModelMapHelper::User()); $user->setAttributes($this->attributes); $user->is_active = true; return $user->register(); }
public function authenticate(ClientInterface $client) { // find existing user by service if ($this->userService !== null) { /** @var User $user */ $user = Yii::createObject(ModelMapHelper::User()); $user = $user->loadModel($this->userService->user_id); $user->login(UsersModule::module()->loginDuration); } else { // no user for this pair // this is the most hard part // create user /** @var SocialServiceInterface|BaseClient $client */ $client->retrieveAdditionalData(); /** @var RegistrationForm $registrationForm */ $registrationForm = Yii::createObject(ModelMapHelper::RegistrationForm()); $this->mapServiceAttributes($client, $registrationForm); $user = $registrationForm->socialRegister($client); if ($user === false) { throw new ErrorException("Unable to register user"); } $userService = $this->createService(); if ($user->save() === false) { throw new ErrorException("Unable to save user:" . var_export($user->errors, true)); } $user->link('services', $userService); // check if we need to run post-registration $user->login(UsersModule::module()->loginDuration); // check if there's some required or recommended fields missing foreach (UsersModule::module()->requiredUserAttributes as $attribute) { if (empty($user->{$attribute})) { Yii::$app->session->setFlash('info', Yii::t('users', 'Please fill required profile fields.')); $this->redirectToProfileUpdate(); return; } } foreach (UsersModule::module()->recommendedUserAttributes as $attribute) { if (empty($user->{$attribute})) { //! @todo Add limitation on UsersModule::recommendedFieldsMaxPrompts Yii::$app->session->setFlash('info', Yii::t('users', 'Please fill recommended profile fields.')); $this->redirectToProfileUpdate(); return; } } } }
<?php echo Html::a(Yii::t('users', 'Register'), ['@registration'], ['class' => 'btn-brd-blue g--btn-full registration-form__register-button']); ?> </div> <div class="m-form__col"> <?php echo Html::a(Yii::t('users', 'Reset Password'), ['@request-reset-password']); ?> </div> </div> </div> <?php if (\DevGroup\Users\UsersModule::module()->enableSocialNetworks === true) { ?> <div class="login-form__social-networks"> <div class="m-form__line"> <div class="m-form__col"> <div class="title-soc-login"><?php echo Yii::t('users', 'Login using social network'); ?> :</div> </div> </div> <div class="m-form__line"> <div class="m-form__col"> <?php echo \DevGroup\Users\widgets\SocialNetworksWidget::widget(['baseAuthUrl' => ['@social', 'returnUrl' => RedirectHelper::getReturnUrl()]]); ?>
public function rules() { return [[['oldPassword', 'newPassword', 'confirmPassword'], 'required'], [['newPassword', 'confirmPassword'], 'string', 'min' => UsersModule::module()->authorizationScenario()->minPasswordLength], [['confirmPassword'], 'compare', 'compareAttribute' => 'newPassword']]; }
<?php /** @var \yii\web\View $this */ use DevGroup\Users\UsersModule; /** @var \DevGroup\Users\models\RegistrationForm $model */ /** @var \yii\bootstrap\ActiveForm $form */ ?> <?php foreach (UsersModule::module()->requiredUserAttributes as $attribute) { ?> <div class="m-form__line"> <?php echo $form->field($model, $attribute); ?> </div> <?php } ?> <div class="m-form__line"> <?php echo $form->field($model, 'password')->passwordInput(); ?> </div> <div class="m-form__line"> <?php echo $form->field($model, 'confirmPassword')->passwordInput(); ?> </div>
?> <div class="user-profile-form"> <?php $form = ActiveForm::begin($formOptions); $returnUrl = \DevGroup\Frontend\RedirectHelper::getReturnUrl(); echo Html::hiddenInput('returnUrl', $returnUrl); $usernameOptions = ['class' => 'user-profile-form__username']; if ($user->username_is_temporary) { $usernameOptions['class'] .= ' input-edit'; echo $form->field($user, 'username', ['options' => $usernameOptions]); } else { $usernameOptions['class'] .= ' input-stat'; echo Html::tag('label', $user->getAttributeLabel('username')); echo Html::tag('div', $user->username, $usernameOptions); } $module = \DevGroup\Users\UsersModule::module(); $attributes = ['email' => true, 'phone' => false]; foreach ($attributes as $attribute => $changeOnlyOnce) { if (in_array($attributes, $module->disabledUserAttributes) === false) { echo '<div class="m-form__line"><div class="m-form__col">'; $options = ['class' => "user-profile-form__{$attribute}"]; if (empty($user->{$attribute}) || $changeOnlyOnce === false) { $options['class'] .= ' input-edit'; echo $form->field($user, $attribute, ['options' => $options]); } else { $options['class'] .= ' input-stat'; echo Html::tag('label', $user->getAttributeLabel($attribute)); echo Html::tag('div', $user->{$attribute}, $options); } echo "</div></div>"; }
/** * Finds out if password reset token is valid * * @param string $token password reset token * @return boolean */ public static function isPasswordResetTokenValid($token) { if (empty($token)) { return false; } $timestamp = (int) substr($token, strrpos($token, '_') + 1); $expire = UsersModule::module()->passwordResetTokenExpire; return $timestamp + $expire >= time(); }
/** * @return array Returns initiated model map */ public static function modelMap() { return UsersModule::module()->modelMap; }
public function rules() { return [[['newPassword'], 'required'], [['newPassword'], 'string', 'min' => UsersModule::module()->authorizationScenario()->minPasswordLength]]; }