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).