Как заблокировать пользователя с сайта?

Список разделов phpBBex 2.x (заброшен) Поддержка 2.x

Описание: У вас проблемы с phpBBex 2.x и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть вопроса. Подробно описывайте проблему. Не забудьте указать версию phpBBex и какие моды установлены, по возможности добавьте скриншоты проблемы или ссылку на страницу с проблемой.
Модератор: Поддержка

Сообщение #1 Nasgool » 09.03.2017, 21:37

Сразу скажу: с phpbbex я новичек. Да и в PHP как таковом тоже разбираюсь с помощью гугла.
Есть сайт, есть форум (2.0.4). Сделал сквозную авторизацию с сайта на форум.
База данных форума и есть база пользователей для сайта.
В некоторых случаях мне необходимо заблокировать пользователя.
Как это сделать из скрипта сайта?
Интегрировано все как в гугле:
Код: Выделить всё
define('IN_PHPBB', true);
$phpbb_root_path = './forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$request->enable_super_globals();
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
// check for logout request
$cp = request_var('cp', '');
// is it a logout? then kill the session!
if ($cp == "logout") {
    $user->session_kill();
    $user->session_begin();
}

Добавлено спустя 3 минуты 50 секунд:
Забыл показать форму авторизации:
Код: Выделить всё
<form id="login_form" method="post" action="forum/ucp.php?mode=login">
<input id="login_edit" type="text" name="username" placeholder="Введите свой логин">
<input id="login_edit" type="password" name="password" placeholder="и пароль">
<input id="login_check" type="checkbox" name="autologin">
<input type="hidden" name="redirect" value="../index.php" />
<input id="login_button" type="submit" value="Вход" name="login" />
</form>
Nasgool
Автор темы
Репутация: 1
С нами: 7 лет 10 месяцев

Сообщение #2 Sumanai » 10.03.2017, 18:07

Nasgool:Интегрировано все как в гугле:
Ну, это по сути не интеграция, а просто проброс данных в оригинальный форум. БД форума и сайта тут никак не взаимодействуют.
На чём сайт работает то?
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 11 месяцев

Сообщение #3 Nasgool » 10.03.2017, 18:47

Сайт работает полностью на самописном скрипте
Nasgool
Автор темы
Репутация: 1
С нами: 7 лет 10 месяцев

Сообщение #4 Sumanai » 10.03.2017, 19:53

Сурово.
Ну раз
Nasgool:База данных форума и есть база пользователей для сайта.
то и блокировать нужно средствами форума и через форум. И нужно учесть, что блокировка на форуме никак не скажется на сайте, хотя это, скорее всего, и не нужно, если на сайт пользователи повлиять никак не могут.
Большего без знания этого скрипта сказать не могу.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 11 месяцев

Сообщение #5 Nasgool » 11.03.2017, 19:24

Sumanai:то и блокировать нужно средствами форума и через форум
В том и вопрос.
Как это правильно делается.
Напрямую в базу данных форума лесть не хочется, чуйка подсказывает что это не по феньшую.
Думаю, что есть способы правильнее и элегантнее. За тем сюда и обратился.

Добавлено спустя 1 минуту 48 секунд:
Скрипт сайта проверяет, авторизован ли пользователь. От этого напрямую зависит содержание страницы сайта

Добавлено спустя 1 минуту 55 секунд:
Проверяется вот так:
Код: Выделить всё
if (!$user->data['is_registered']) {
    // Не авторизован
} else {
    // Авторизован
}

Добавлено спустя 2 часа 3 минуты:
Может я не правильно сформулировал вопрос?
Я хочу узнать о механизме блокировки пользователя форума из скрипта сайта.

Добавлено спустя 1 минуту 12 секунд:
Если для этого существует корректный механизм.
Или все-таки нужно лесть в базу форума напрямую?
Nasgool
Автор темы
Репутация: 1
С нами: 7 лет 10 месяцев

Сообщение #6 Sumanai » 11.03.2017, 22:07

Сколько на вашем скрипте вообще написано? Не проще ли при такой постановке вопроса сделать всё при помощи форума? Ну там расширение Pages, или свои, если на них есть логика.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 11 месяцев

Сообщение #7 Nasgool » 12.03.2017, 15:49

Опишу подробнее.
Это сайт для La2 старых хроник и работающий по дальневосточному времени.
В игре отключен ГМшоп.
Все покупки и управление игровыми аккаунтами (не путать с аккаунтом форума) происходит на сайте (мой самописный скрипт).
Мой скрипт отслеживает попытки взлома магазина и банит все игровые аккаунты пользователя, отсылает лог мне на почту. И мне ручками приходится блокировать данного пользователя на форуме.
Хотелось бы автоматизировать процесс.

Вопрос простой:
Могу ли я из своего скрипта заблокировать пользователя форума.
Примерно так же как я получаю о нем информацию ($user->data['название поля']).

Добавлено спустя 1 минуту 36 секунд:
Если такого механизма не существует, то так и скажите, полезу базу ковырять.
Nasgool
Автор темы
Репутация: 1
С нами: 7 лет 10 месяцев

Сообщение #8 Sumanai » 12.03.2017, 16:11

\includes\mcp\mcp_ban.php, там только два действия- бан и разбан. По сути всё сводится к вызову функции user_ban(), определённой в \includes\functions_user.php, с корректными параметрами.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 11 месяцев

Сообщение #9 Nasgool » 12.03.2017, 16:21

Буду пробовать, отпишу результат
Nasgool
Автор темы
Репутация: 1
С нами: 7 лет 10 месяцев

Сообщение #10 Nasgool » 13.03.2017, 17:50

Пока ничего не вышло.
После отработки функции user_ban появляется запись в таблице banlist, но пользователь все равно может войти на сайт.
Почитал описание полей данной таблицы, переписал код.
Напрямую в таблицу вношу запись.
Все равно может войти.
Ради эксперимента забанил пользователя через админку.
Тот же эффект. Вернее никакого. Пользователь спокойно входит.
Куда копать подскажете?
А пока сам полезу в настройки форума.

Добавлено спустя 20 минут 18 секунд:
Все! Разобрался! Огромное спасибо за помощь.
Покопался в коде форума.
Напрямую вношу необходимые данные в banlist
Код: Выделить всё
$arr = ['user_id' => $user->data['user_id'], 'ban_start' => time()];
$user->session_kill();
$user->session_begin();
$pdo = new PDO("mysql:host=localhost;dbname=$phpbbexdb;charset=utf8", $phpbbexdbuser, $phpbbexdbpass, $opt);
$data = $pdo->prepare('INSERT INTO `bb_banlist`(`ban_userid`, `ban_ip`, `ban_email`, `ban_start`, `ban_end`, `ban_exclude`, `ban_reason`, `ban_give_reason`) VALUES (:user_id, "", "", :ban_start, 0, 0, "Причина бана для админа", "Причина бана, видимая пользователю");');
$data->execute($arr);

Добавлено спустя 8 секунд:
Тема закрыта
Nasgool
Автор темы
Репутация: 1
С нами: 7 лет 10 месяцев

Сообщение #11 Sumanai » 13.03.2017, 18:42

Nasgool:Напрямую вношу необходимые данные в banlist
Скорее всего дело в параметрах, которые вы передавали в функцию. Думаю, лучше было бы разобраться с ней, так как в будущем формат полей может изменится, и ваш скрипт отвалится, а функция продолжит работать, ну или по крайней мере ошибка явно укажет на изменения в сигнатуре функции.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 11 месяцев


Вернуться в Поддержка 2.x



cron