/** @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()]));
     }];
 }
示例#3
0
 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();
 }
示例#5
0
 /** @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;
 }