/** * Grab the user's ungrabbed posts from Facebook * * @param \yii\authclient\BaseOAuth $client */ public static function grabSocial(\yii\authclient\BaseOAuth $client) { if ($client->getId() === 'facebook') { $token = $client->getAccessToken(); \Facebook\FacebookSession::enableAppSecretProof(false); $session = new \Facebook\FacebookSession($token->getToken()); $request = new \Facebook\FacebookRequest($session, 'GET', "/me/posts"); $response = $request->execute()->getResponse(); $posts = $response->data; foreach ($posts as $post) { if (!Fbposts::find()->where('post_id = :pid', ['pid' => $post->id])->exists()) { $fbpost = new Fbposts(['user_id' => Yii::$app->user->id, 'post_id' => $post->id, 'message' => isset($post->message) ? $post->message : $post->story, 'created_time' => $post->created_time]); $fbpost->save(); } } } }
/** * @param BaseOAuth $client * @throws \yii\db\Exception */ public function onAuthSuccess($client) { \Yii::info('start auth client: ' . $client->getId(), 'authClient'); $attributes = $client->getUserAttributes(); /* @var $userAuthClient UserAuthClient */ $userAuthClient = UserAuthClient::find()->where(['provider' => $client->getId(), 'provider_identifier' => ArrayHelper::getValue($attributes, 'id')])->one(); if (\Yii::$app->user->isGuest) { if ($userAuthClient) { // Все просто идет авторизация $userAuthClient->provider_data = $attributes; $userAuthClient->save(); $user = $userAuthClient->user; \Yii::$app->user->login($user); } else { // Регистрация /** * @var $user User */ $user = null; //Если соц сеть вернула нам email то на него можно опираться. if ($emailFromAuthClient = ArrayHelper::getValue($attributes, 'email')) { //Нашли email $userEmailModel = CmsUserEmail::find()->where(['value' => $emailFromAuthClient])->one(); if ($userEmailModel) { if ($userEmailModel->user) { $user = $userEmailModel->user; } } } if (!$user) { $userClassName = \Yii::$app->cms->getUserClassName(); $user = new $userClassName(); $user->populate(); if (!$user->save()) { \Yii::error("Не удалось создать пользователя: " . serialize($user->getErrors()), 'authClient'); return false; } //Тут можно обновить данные пользователя. if ($login = ArrayHelper::getValue($attributes, 'screen_name')) { $user->username = $login; if (!$user->save()) { \Yii::error("Не удалось обновить данные пользователя: " . serialize($user->getErrors()), 'authClient'); } } //Тут можно обновить данные пользователя. if ($login = ArrayHelper::getValue($attributes, 'login')) { $user->username = $login; if (!$user->save()) { \Yii::error("Не удалось обновить данные пользователя: " . serialize($user->getErrors()), 'authClient'); } } if ($email = ArrayHelper::getValue($attributes, 'email')) { $user->email = $email; if (!$user->save()) { \Yii::error("Не удалось обновить данные пользователя: " . serialize($user->getErrors()), 'authClient'); } } if ($name = ArrayHelper::getValue($attributes, 'name')) { $user->name = $name; if (!$user->save()) { \Yii::error("Не удалось обновить данные пользователя: " . serialize($user->getErrors()), 'authClient'); } } $firstName = ArrayHelper::getValue($attributes, 'first_name'); $lastName = ArrayHelper::getValue($attributes, 'last_name'); if ($firstName || $lastName) { $user->name = $lastName . " " . $firstName; if (!$user->save()) { \Yii::error("Не удалось обновить данные пользователя: " . serialize($user->getErrors()), 'authClient'); } } } //$transaction = $user->getDb()->beginTransaction(); $auth = new UserAuthClient(['user_id' => $user->id, 'provider' => $client->getId(), 'provider_identifier' => (string) $attributes['id'], 'provider_data' => $attributes]); if ($auth->save()) { //$transaction->commit(); Yii::$app->user->login($user); if (!$user->image) { try { if ($photoUrl = ArrayHelper::getValue($attributes, 'photo')) { $file = \Yii::$app->storage->upload($photoUrl, ['name' => $user->name]); $user->link('image', $file); } } catch (\Exception $e) { } } if (!$user->image) { try { if ($photoUrl = ArrayHelper::getValue($attributes, 'avatar_url')) { $file = \Yii::$app->storage->upload($photoUrl, ['name' => $user->name]); $user->link('image', $file); } } catch (\Exception $e) { } } } else { \Yii::error("Не удалось создать социальный профиль: " . serialize($auth->getErrors()), 'authClient'); } } } else { // user already logged in if (!$userAuthClient) { // add auth provider $userAuthClient = new UserAuthClient(['user_id' => \Yii::$app->user->identity->id, 'provider' => $client->getId(), 'provider_identifier' => (string) $attributes['id'], 'provider_data' => $attributes]); if (!$userAuthClient->save()) { print_r($userAuthClient->getErrors()); die('no'); } } else { $userAuthClient->provider_data = $attributes; $userAuthClient->save(); } } }