/** * Register a new user using client attributes and then associate userAuth * * @param \yii\authclient\BaseClient $client * @param \common\modules\user\models\UserAuth $userAuth */ protected function registerAndLoginUser($client, $userAuth) { /** @var \common\modules\user\models\User $user */ /** @var \common\modules\user\models\Profile $profile */ /** @var \common\modules\user\models\Role $role */ $role = Yii::$app->getModule("user")->model("Role"); // set user and profile info $attributes = $client->getUserAttributes(); $function = "setInfo" . ucfirst($client->name); // "setInfoFacebook()" list($user, $profile) = $this->{$function}($attributes); // calculate and double check username (in case it is already taken) $fallbackUsername = "******"; $user = $this->doubleCheckUsername($user, $fallbackUsername); // save new models $user->setRegisterAttributes($role::ROLE_USER, Yii::$app->request->userIP, $user::STATUS_ACTIVE)->save(false); $profile->setUser($user->id)->save(false); $userAuth->setUser($user->id)->save(false); // log user in Yii::$app->user->login($user, Yii::$app->getModule("user")->loginDuration); }