Esempio n. 1
0
 /**
  * Результат успешной авторизации с помощью социальной сети
  * @param $client - социальная сеть, через которую происходит авторизация
  * @return bool
  */
 public function successCallback($client)
 {
     $attributes = $client->userAttributes;
     $this->action->successUrl = Yii::$app->session->get('returnUrl');
     /** @var \lowbase\user\models\UserOauthKey $key */
     $key = UserOauthKey::findOne(['provider_id' => $attributes['provider_id'], 'provider_user_id' => $attributes['provider_user_id']]);
     if ($key) {
         // Ключ авторизации соц. сети найден в базе
         if (Yii::$app->user->isGuest) {
             // Авторзириуемся если Гость
             return Yii::$app->user->login($key->user, 3600 * 24 * 30);
         } else {
             // Запрщаем авторизацию если не свой ключ
             if ($key->user_id != Yii::$app->user->id) {
                 Yii::$app->session->setFlash('error', Yii::t('user', 'Данный ключ уже закреплен за другим пользователем сайта.'));
                 return true;
             }
         }
     } else {
         // Текущего ключа авторизации соц. сети нет в базе
         if (Yii::$app->user->isGuest) {
             $user = false;
             if ($attributes['User']['email'] != null) {
                 // Пытаемся найти пользователя в базе по почте из соц. сети
                 $user = User::findByEmail($attributes['User']['email']);
             }
             if (!$user) {
                 // Не найден пользователь с Email, создаем нового
                 $user = new User();
                 $user->load($attributes);
                 $user->validate();
                 // Сохранение изображения
                 if (file_get_contents($user->photo)) {
                     $user->photo = file_get_contents($user->photo);
                 }
                 return $user->save() && $this->createKey($attributes, $user->id) && Yii::$app->user->login($user, 3600 * 24 * 30);
             } else {
                 // Найден Email. Добавляем ключ и авторизируемся
                 return $this->createKey($attributes, $user->id) && Yii::$app->user->login($user, 3600 * 24 * 30);
             }
         } else {
             // Добавляем ключ для авторизированного пользователя
             $this->createKey($attributes, Yii::$app->user->id);
             Yii::$app->session->setFlash('success', Yii::t('user', 'Ключ входа успешно добавлен.'));
             return true;
         }
     }
     return true;
 }