我在数据库中设置了 dovecot 和虚拟用户。现在我想使用相同的用户已经在数据库中。是否可以以某种方式配置 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')
这只是让您入门的基础知识,您还需要处理更多事情(例如,如果用户第一次登录,则在 ownCloud 中创建新用户)。