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

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

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

1 ответ

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

Этот пост из формы 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')

This is just the basic to get you started, you will have to handle a little more (for example creation of a new user in ownCloud if a user logs in the first time).

Другие вопросы по тегам