client = $client; $this->query = $query; } public function run() { $account = $this->getSocialNetworkAccount(); if ($account->user === null) { /** @var User $user */ $user = Yii::$app->user->identity; $account->link('user', $user); return true; } return false; } protected function getSocialNetworkAccount() { $account = $this->query->whereClient($this->client)->one(); if (null === $account) { $data = $this->client->getUserAttributes(); $account = Yii::createObject( [ 'class' => SocialNetworkAccount::class, 'provider' => $this->client->getId(), 'client_id' => $data['id'], 'data' => json_encode($data) ] ); $account->save(false); } return $account; } }