/**
* Получаем данные о процессе авторизации
* return array|boolean
*/
public function authData()
{
$nSocialID = $this->authStatus();
do {
if (empty($nSocialID)) {
break;
}
$aData = $this->getSocialAccountData($nSocialID, false);
if (empty($aData)) {
break;
}
# Ищем соц.аккаунт
$aData = $this->getSocialAccountData($nProfileID, $nProviderID);
if (empty($aData)) # нет соц.аккаунта
{
# Создаем соц.аккаунт
$nSocialID = $this->createSocialAccount(0, $nProfileID, $nProviderID, $this->serializeHybridProfile($profile));
if ($nSocialID) {
if ($nUserID) {
# пользователь авторизован => привязываем соц.аккаунт к пользователю
$this->linkSocialAccountToUser($nSocialID, $nUserID);
$this->redirectFromPopup();
}
# сохраняем в сессии пометку о процессе авторизации через соц.сеть
$this->authStatus($nSocialID);
# переходим к шагу №2
$this->redirectFromPopup(Users::url('register', array('step' => 'social')));
} else {
# Неудалось создать соц.аккаунт
$this->errors->set(_t('users', 'Произошла ошибка авторизации, попробуйте обновить страницу и авторизоваться повторно'));
}
} else {
$nSocialID = $aData['id'];
if (!$aData['user_id']) # соц.аккаунт не привязан к пользователю сайта
{
if ($nUserID) {
# пользователь авторизован => привяжем соц.аккаунт к пользователю
$this->linkSocialAccountToUser($nSocialID, $nUserID);
$this->redirectFromPopup();
}
# сохраняем в сессии пометку о процессе авторизации через соц.сеть
$this->authStatus($nSocialID);
# переходим к шагу №2
$this->redirectFromPopup(Users::url('register', array('step' => 'social')));
} else # привязан
{
if ($nUserID) {
# одновременно один профиль в одной соц.сети не может быть привязан
# к двум разным аккаунтам пользователей(TABLE_USERS), поэтому проверку на привязку
# текущего пользователя к данному соц.аккаунту ($nSocialID) не выполняем:
# - пользователь авторизован, обновляем страницу
$this->redirectFromPopup();
}
# Авторизуем пользователя привязанного к данному соц.аккаунту
$mResult = Users::i()->userAuth($aData['user_id'], 'user_id', $aData['user_password'], true, true);
if ($mResult === true) {
$this->redirectFromPopup();
} elseif ($mResult === 1) {
# неактивирован
# ... выводим сообщение о необходимости Активации аккаунта
} elseif (is_array($mResult)) {
# заблокирован
# ... выводим сообщение о Блокировке аккаунта и причину
}
}
}
} catch (\Exception $e) {
$nErrorCode = $e->getCode();
if ($nErrorCode == 5) { # пользователь нажал "Отмена"
$this->redirectFromPopup();
}
$aErrors = array(
# Unspecified error.
0 => 'Неизвестная ошибка.',
# Unknown or disabled provider.
1 => 'Ошибка конфигурации Hybriauth.',
# Provider not properly configured.
2 => 'Провайдер настроен некорректно.',
# Unknown or disabled provider.
3 => 'Неизвестный или неподдерживаемый провайдер.',
# Missing provider application credentials.
4 => 'Доступы проложения провайдера настроены некорректно.',
# Authentification failed. The user has canceled the authentication or the provider refused the connection.
5 => 'Ошибка аутентификации. Пользователь "отменил" либо провайдер отказал в подключении',
# User profile request failed. Most likely the user is not connected to the provider and he should to authenticate again.
6 => 'Запрос к данным профиля пользователя завершился ошибкой. Скорее всего пользователь не подключился к провайдеру и необходима повторная аутентификация',
# User not connected to the provider.
7 => 'Пользователь не подключился к провайдеру.',
);
if (isset($aErrors[$nErrorCode])) {
$error = $aErrors[$nErrorCode];
if (in_array($nErrorCode, array(6, 7))) {
if (!empty($adapter)) {
$adapter->logout();
}
}
}
bff::log('HybridAuth: ' . $e->getMessage());
}
return 0;
}
/**
* Помечаем / получаем процесс авторизации в сессии
* @param integer|null $mSocialID ID соц.аккаунта или NULL(получаем текущий)
* return mixed
*/
public function authStatus($mSocialID = null)
{
$sKey = 'users-login-social-status';
if (is_null($mSocialID)) {
return $this->security->getSESSION($sKey);
} else {
$this->security->setSESSION($sKey, $mSocialID);
}
}
Ошибка ушла закрыл такой ковычкой ;
Дальше еще одна ошибка {"error":"invalid_request","error_description":"redirect_uri is incorrect, check application redirect uri in the settings page"}
Где копать?
* Получаем данные о процессе авторизации
* return array|boolean
*/
public function authData()
{
$nSocialID = $this->authStatus();
do {
if (empty($nSocialID)) {
break;
}
$aData = $this->getSocialAccountData($nSocialID, false);
if (empty($aData)) {
break;
}
$aProfileData = (!empty($aData['profile_data']) ? func::unserialize($aData['profile_data']) : array());
unset($aData['profile_data']);
# Формируем ФИО
$aName = array();
if (!empty($aProfileData['firstName'])) {
$aName[] = $aProfileData['firstName'];
}
if (!empty($aProfileData['lastName'])) {
$aName[] = $aProfileData['lastName'];
}
$aData['name'] = join(' ', $aName);
# Аватар
$aData['avatar'] = (!empty($aProfileData['photoURL']) ? $aProfileData['photoURL'] : '');
# E-mail
if (!empty($aProfileData['email']) && $this->input->isEmail($aProfileData['email'], false)) {
$aData['email'] = $aProfileData['email'];
}
return $aData;
} while (false);
return false;
}
/**
* Завершаем авторизацию / регистрацию через соц.сеть
* Привязываем соц.аккаунт к пользователю
* @param integer $nUserID ID пользователя
* return bool
*/
public function authFinish($nUserID)
{
$nSocialID = $this->authStatus();
if ($nUserID && !empty($nSocialID) && $nSocialID > 0) {
$bSuccess = $this->linkSocialAccountToUser($nSocialID, $nUserID);
if ($bSuccess) {
$this->authStatus(0);
}
return $bSuccess;
}
return false;
}