У меня есть установка 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, если пользователь входит в систему в первый раз).