我已经使用extauth脚本(perl)成功配置了一个ejabberd服务器。 它工作正常,只允许用户从我的mysql数据库。
但是以下功能不再起作用:名册管理,将用户添加到名单,授权用户(将其添加到名册中) 使用内部身份验证它可以工作。两次ejabberd都配置为使用内部遗忘数据库。
请帮我弄清楚,为什么它没有启用extauth。我是否必须在extauth脚本中编写自己的方法? (我真的不想......)
答案 0 :(得分:1)
因此,在对我的问题进行一些研究后,我认为切换到外部认证不会支持名册管理。
我最终做的是重新开始内部身份验证并使用mod_admin_extra添加用户并使用此php脚本更新密码:
<?php
class Jabber
{
public static function registerAndAddToSharedRoster($userId, $sessionToken)
{
$url = "http://localhost:5280/rest";
$register = "register $userId jabber.YOUR_DOMAIN.com $sessionToken";
sendRESTRequest($url, $register);
$sharedRoster = "srg_user_add $userId jabber.YOUR_DOMAIN.com shared jabber.YOUR_DOMAIN.com";
sendRESTRequest($url, $sharedRoster);
}
public static function updatePassword($userId, $newPassword)
{
$url = "http://localhost:5280/rest";
$register = "change_password $userId jabber.YOUR_DOMAIN.com $newPassword";
sendRESTRequest($url, $register);
}
}
function sendRESTRequest ($url, $request)
{
// Create a stream context so that we can POST the REST request to $url
$context = stream_context_create (array ('http' => array ('method' => 'POST'
,'header' => "Host: localhost:5280\nContent-Type: text/html; charset=utf-8\nContent-Length: ".strlen($request)
,'content' => $request)));
$result = file_get_contents($url, false, $context);
return $result;
}
?>
希望这有助于某人!
答案 1 :(得分:0)
这个答案很晚,但它可以帮助某人:
与@ ben-marten的回答相反,切换到外部身份验证确实支持名册管理。
当您将某人添加到名单中时,ejabberd正在“调用” isuser 操作 - 检查它是否是有效用户 - 您必须在脚本中提供该方法:请参阅ejabberd Developers Guide - External Authentication
我忽略了该操作,我无法将用户添加到名单中。
有关其他脚本示例,请参阅Authentication Scripts