Как программно войти на форум phpBB?

У меня есть форум на phpBB. Теперь я хотел бы сделать что-то подобное из исходного кода:

логин("пользователь", "пароль")

Как это сделать в phpBB?


person Tomasz Smykowski    schedule 10.11.2011    source источник


Ответы (3)


Вам понадобится скрипт, который интегрируется с фреймворком phpBB. Что-то вроде этого должно работать.

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>

Затем просмотрите $auth->login( ) (пример использования функции login_box() в /includes/functions.php). Упрощенный, но неполный пример:

$result = $auth->login($username, $password); // There are more params but they're optional

if ($result['status'] == LOGIN_SUCCESS)
{
    // Logged in
}
else
{
    // Something went wrong
}
person nickb    schedule 10.11.2011

Сначала вам нужно загрузиться для phpBB:

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './phpBB/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

$user->session_begin();

Вам придется заменить часть ./phpBB/ на относительный путь к форуму.

Чтобы пользователь вошел в систему, вы должны сделать:

$result = $user->session_create($user_id, $admin, $autologin, $viewonline);

$admin, вероятно, должно быть false, $autologin и $viewonline в зависимости от того, что вы хотите.

ПРИМЕЧАНИЕ. Вызов session_create установит файл cookie сеанса для пользователя, поэтому убедитесь, что вы вызываете его только тогда, когда текущий запрос действительно обслуживает этого пользователя.

person igorw    schedule 10.11.2011
comment
Это не отвечает на вопрос OP, так как ваше решение не принимает имя пользователя/пароль пользователя для их входа в систему, а принудительно выполняет вход в систему с определенным $user_id. - person nickb; 10.11.2011
comment
Честно говоря, я слишком углубился в детали. Я все равно оставлю свой ответ здесь, так как приложил к этому некоторые усилия. Может поможет кому-нибудь когда-нибудь. - person igorw; 10.11.2011
comment
Я знаю, что уже довольно поздно, но большое спасибо за решение оставить ответ, потому что это единственное место, где я нашел решение, как входить в систему пользователей, используя только идентификатор пользователя, а не пароль. - person TheNavigat; 05.02.2014
comment
Для людей, которые ищут способ изменить вошедшего в систему пользователя, вы можете сделать это аналогичным образом. $user->session_kill(); $user->session_create($newUserID, false, true); $auth->acl($user->data); Я использую это, чтобы переключиться на анонимного пользователя (userid = 1) до того, как мой скрипт выполнит автоматическую публикацию, а затем переключиться обратно на исходного пользователя (чей идентификатор пользователя я сохранил до переключения). - person Magnus W; 27.09.2015

В вашем PHP-скрипте, сканирующем HTML, необходимо:

  • Данные POST, как если бы они заполняли форму
  • Получить ответ от сервера; вероятно, извлечь файлы cookie сеанса
  • Отправить эти файлы cookie для последующих запросов

Возможно, вам будет интересно использовать какую-нибудь уже существующую библиотеку для облегчения этого.
Например, вы можете взглянуть на Zend_Http_Client (см. также ; часть об отправке нескольких Запросы с одним и тем же клиентом вас наверняка заинтересуют ;-))


Вы также можете ознакомиться с некоторыми другими вопросами и ответами, например:

person Yada    schedule 10.11.2011
comment
Не совсем уверен, как это связано с phpBB? - person nickb; 10.11.2011
comment
Вопрос был: Как программно зайти на форум phpBB?. Это хороший общий ответ, объясняющий это. - person BudwiseЯ; 10.11.2011
comment
@budwiser. Вопрос был в том, как войти в phpBB, а не в том, как вообще войти в какое-либо удаленное веб-приложение. Таким образом, он не очень подходит для phpBB, особенно когда есть доступный API, и этот ответ говорит о сканировании HTML и удаленной аутентификации. (Вопрос ОП четко указывает на необходимость локального решения для аутентификации) - person nickb; 10.11.2011