25 мая 2010 г.

PHPBB3 - Аутентификация LDAP + DB

Долго думал и гуглил свою проблему. Есть пользователи в phpbb3 базе. Возникла потребность прикрутить к форуму еще и LDAP базу (корпоративные пользователи). Но phpbb3 не умеет этого одновременно. Т.е. если используется аутентификация LDAP, то зарегистрированные ранее пользователи форума не смогут зайти. Что сильно удручало меня. Решение нашлось, но не сразу.
Делюсь :)
Создать файл includes/auth/auth_ldap_db.php с таким содержимым:

<?php

include_once($phpbb_root_path . 'includes/auth/auth_ldap.' . $phpEx);
include_once($phpbb_root_path . 'includes/auth/auth_db.' . $phpEx);

function init_ldap_db()
{
        init_ldap();
}

function login_ldap_db(&$username, &$password)
{
    $test_login_ldap = login_ldap(&$username, &$password);

    if (($test_login_ldap[status] == LOGIN_SUCCESS)||($test_login_ldap[status] == LOGIN_SUCCESS_CREATE_PROFILE))
    {
            return $test_login_ldap;
    }

    return login_db(&$username, &$password);
}
?>


И все. В ACP разделе Аутентификация появится метод Ldap_db
Сначала проверяется пользователь в LDAP, и если не найден, то в Базе phpbb3

Первоисточник рецепта:
раздел страницы: phpBB • View topic - LDAP Authentication with fallback to DB auth? (открыть в Google ВикиКомментариях)

1 комментарий:

  1. Спасибо за наводку. Сам долго гуглил. Но у меня этот метод никак не работал. В логах апача нашел:

    PHP Fatal error: Call-time pass-by-reference has been removed in /var/www/forum/includes/auth/auth_ldap_db.php on line 13

    Еще погуглив нарыл, что в указаном файле лишними оказались знаки амперсанда. Убрал - заработало как часики!
    Может кому пригодится.

    ОтветитьУдалить