/** * Результат успешной авторизации с помощью социальной сети * @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; }