/** @inheritdoc */ public function run() { if ($this->model === null) { $this->model = Yii::createObject(ModelMapHelper::LoginForm()); } $this->formOptions['action'] = ['@login']; return $this->render($this->viewFile, ['model' => $this->model, 'formOptions' => $this->formOptions]); }
/** * Finds user by specified field(username, email, phone) * @param \DevGroup\Users\models\LoginForm $loginForm * @param string $field * * @return array */ protected function findUserByField(LoginForm &$loginForm, $field = 'username') { return [$field, function ($attribute) use(&$loginForm) { $user = Yii::createObject(ModelMapHelper::User()); /** @var LazyCache $cache */ $cache = Yii::$app->cache; $value = $loginForm->{$attribute}; $loginForm->user = $cache->lazy(function () use($user, $value, $attribute) { return $user::find()->where("{$attribute}=:param", [':param' => $value])->one(); }, "User:by:{$attribute}:{$value}", 86400, new TagDependency(['tags' => $user::commonTag()])); }]; }
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; } } } }
/** * @inheritdoc */ public function bootstrap($app) { $this->buildModelMap(); $this->buildAliases(); $app->i18n->translations['users'] = ['class' => 'yii\\i18n\\PhpMessageSource', 'basePath' => __DIR__ . DIRECTORY_SEPARATOR . 'messages']; foreach (ArrayHelper::merge($this->defaultHandlers, $this->handlers) as $eventData) { Event::on($eventData['class'], $eventData['event_name'], $eventData['event_handler']); } $app->on(Application::EVENT_BEFORE_REQUEST, function () { if ($this->logLastLoginTime === true) { Event::on(ModelMapHelper::User(), User::EVENT_LOGIN, function (Event $event) { /** @var User $user */ $user = $event->sender; $user->last_login_at = time(); $user->save(true, ['last_login_at']); }); } }); $this->frontendMonsterPatch(); }
/** @inheritdoc */ public function run() { /** @var LoginForm $model */ $model = Yii::createObject(ModelMapHelper::LoginForm()); if ($model->load(Yii::$app->request->post())) { if (Yii::$app->request->isAjax) { Yii::$app->response->format = Response::FORMAT_JSON; // perform AJAX validation echo ActiveForm::validate($model); Yii::$app->end(); return ''; } if ($model->login()) { $returnUrl = Yii::$app->request->get('returnUrl'); if ($returnUrl !== null) { return $this->controller->redirect($returnUrl); } else { return $this->controller->goBack(); } } } return $this->controller->render($this->viewFile, ['model' => $model, 'formOptions' => $this->formOptions]); }
public function beforeRun() { $this->model = Yii::createObject(ModelMapHelper::RegistrationForm()); return parent::beforeRun(); }
public function generateUsername($additionalData = []) { // try to use name part of email if (!empty($this->email)) { $this->username = explode('@', $this->email)[0]; if ($this->validate(['username'])) { return $this->username; } } $additionalDataChecks = ['name', 'full_name', 'first_name', 'last_name']; foreach ($additionalDataChecks as $key) { if (isset($additionalData[$key])) { $this->username = $additionalData[$key]; if ($this->validate(['username'])) { return $this->username; } } } /** @var User $userModel */ $userModel = Yii::createObject(ModelMapHelper::User()); $tableName = $userModel->tableName(); unset($userModel); while (!$this->validate(['username'])) { $row = (new Query())->from($tableName)->select('MAX(id) as id')->one(); $this->username = '******' . ++$row['id']; } return $this->username; }