Назад | Перейти на главную страницу

owncloud с уже существующей базой данных пользователей

У меня есть установка dovecot с виртуальными пользователями в базе данных. Теперь я хочу настроить owncloud, используя тем же пользователи уже в базе. Можно ли как-то настроить owncloud, чтобы можно было входить в систему только с именем пользователя и паролем из моей существующей базы данных? Вы, может быть, знаете об этом учебнике? (Я не нашел ни объяснений, ни учебника.)

База данных имеет два столбца, один с пользователем, другой с хешированным паролем (sha512-crypt, с обычным форматом mysql: $ 6 $ salt $ hash)

Насколько я могу судить, вы не можете напрямую использовать внешнюю базу данных пользователей. Однако должна быть возможность использовать крюк который обращается к базе данных пользователей при попытке входа в систему.

Этот пост из формы owncloud показывает, как pre_login используется. Он проверяет наличие группы LDAP, но это должно быть легко адаптировано к вашему случаю.

Скопируйте и вставьте самое необходимое из сообщения:

Создайте функцию, которая выполняет поиск в вашей базе данных и возвращает true когда пользователь действителен.

файл <owncloud>/apps/<your_plugin>/appinfo/hooks.php

OC::$CLASSPATH['OC_Templates'] = 'lib/util.php';
class OC_user_ldap_Hooks{

public static function IsUserInGroup($parameters) {
            // replace this with your own database logic
            $filter = "(&(cn=owncloudusers)(memberUid=".$parameters['uid']."))";
           if(!OC_LDAP::searchGroups($filter, 'dn') && $parameters['uid']!="admin")
            {
                    $tmpl = new OC_Template( '', 'error', 'guest' );
                    $tmpl->assign('errors',array(1=>array('error'=>"User <b>".$parameters['uid']."</b> is not a member of a group allowed to login.")));
                    $tmpl->printPage();
                    exit;
            }
            return true;
    }
}

И в файле <owncloud>/apps/<your_plugin>/appinfo/app.php

OC::$CLASSPATH['OC_user_ldap_Hooks'] = 'apps/<your_plugin>/lib/hooks.php';
OCP\Util::connectHook('OC_User', 'pre_login', 'OC_user_ldap_Hooks', 'isUserInGroup')

Это всего лишь базовая информация, с которой вы начнете, вам придется сделать еще немного (например, создание нового пользователя в ownCloud, если пользователь входит в систему в первый раз).