Search
Write a publication
Pull to refresh

Решение проблемы авторизации на форумах phpBB 3.0.X через Loginza

Reading time2 min
Views2.4K
imageДрузья, недавно потребовалось установить на форум авторизацию через социальные сети. Из всех плагинов, что удалось найти по требованиям подошел только плагин Loginza. Для тех, кто не знает:

Loginza – это система идентификации, обеспечивающая единый доступ к популярным WEB-сервисам. Используя учетную запись Loginza Вы сможете посещать большое количество сайтов блогов и форумов, поддерживающих вход OpenID и виджет Loginza, — а это значит не нужно проходить однотипную регистрацию на каждом ресурсе и следить за актуальностью контактной и иной информации профиля на каждом из сайтов.

Почитав немного про него, я очень обрадовался — то что надо. Установка на локальной машине прошла чуть ли не в 1 клик, все работало просто идеально. Но после переноса на реально работающий сервер, по каким-то причинам слетела авторизация и регистрация. При попытке зайти в систему форум говорил, что пользователь опознан, но при следующем переходе на форум авторизация слетала. Посидев пару часиков и покопавшись в коде, я нашел причину проблемы.

Кстати, сразу хочу отметить, что данное решение немного бьет по безопасности, так как в нем отключен безопасный режим проверки token. В общем, свои теории о том как я дошел до этого описывать не буду, сразу обращу внимание на API. Нас интересует вот этот пункт (Проверка ключа token через Loginza.API).

Там сказано, что для подтверждения успешной авторизации необходимо сделать запрос на URL:
loginza.ru/api/authinfo?token=[TOKEN_KEY_VALUE]&id=[WIDGET_ID]&sig=[API_SIGNATURE]
Где, [TOKEN_KEY_VALUE] — проверяемое значение token;
[WIDGET_ID] — ID виджета;
[API_SIGNATURE] — подпись запроса к API. Расчитывается как MD5 от сложения строк значения token и секретного ключа виджета. Пример: md5(token+skey).

Вообще, этот адрес генерируется в классе \includes\loginza\libs\LoginzaAPI.class.php в 113 строке:

$url = str_replace('%method%', $method, self::API_URL).'?'.http_build_query($params);

В результате нескольких экспериментов, было выяснено, что этот адрес генерируется неверно. В него не добавляются параметры [WIDGET_ID] и [API_SIGNATURE]. Хотя даже при ручном добавлении этих параметров ничего не происходила — Loginza отвечала, что sig неправильный. Было решено пренебречь безопасностью.

Итак, если у вас не работает авторизация на форуме через Loginza, то проделайте следующее:

1) В настройках профиля своих виджетов (вы же создали его, подтвердили права на сайт?) в настойках сайта убираем галочку «Безопасный режим проверки token».

2) Файл \includes\loginza\libs\LoginzaAPI.class.php, строка 38. Заменяем строку:
return $this->apiRequert('authinfo', array('token' => $token));
На
return $this->apiRequert('authinfo', $token);

3) 113 строку того же файла заменяем с
$url = str_replace('%method%', $method, self::API_URL).'?'.http_build_query($params);
На
$url .= 'http://loginza.ru/api/authinfo?token='.$params;

Проблема решена! :)
Tags:
Hubs:
Total votes 13: ↑7 and ↓6+1
Comments9

Articles