Perl ejabberd:保存未启用外部身份验证脚本的花名册
我已经成功地用extauth脚本(perl)配置了ejabberd服务器。 它工作正常,只允许mysql数据库中的用户使用 但以下功能不再起作用:名册管理、将用户添加到名册、用户授权(用于将用户添加到名册) 通过内部授权,它可以工作。两次ejabberd都配置为使用内部健忘症数据库Perl ejabberd:保存未启用外部身份验证脚本的花名册,perl,xmpp,ejabberd,Perl,Xmpp,Ejabberd,我已经成功地用extauth脚本(perl)配置了ejabberd服务器。 它工作正常,只允许mysql数据库中的用户使用 但以下功能不再起作用:名册管理、将用户添加到名册、用户授权(用于将用户添加到名册) 通过内部授权,它可以工作。两次ejabberd都配置为使用内部健忘症数据库 请帮我弄清楚,为什么它不能在启用extauth的情况下工作。我必须在extauth脚本中编写自己的方法吗?(我真的不想…)所以在对我的问题做了一些研究之后,我认为切换到外部身份验证将不支持名册管理 我最后做的是切换回
请帮我弄清楚,为什么它不能在启用extauth的情况下工作。我必须在extauth脚本中编写自己的方法吗?(我真的不想…)所以在对我的问题做了一些研究之后,我认为切换到外部身份验证将不支持名册管理 我最后做的是切换回内部身份验证,并使用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;
}
?>
希望这对别人有帮助 这个答案已经晚了,但它可以帮助某人: 与@ben marten的回答相反,切换到外部身份验证确实支持名册管理 当您将某人添加到花名册时,ejabberd正在“调用”isuser操作-检查它是否为有效用户-您必须在脚本中提供该方法:请参阅 我忽略了该操作,无法将用户添加到名册中
有关其他脚本示例,请参见日志中的任何错误?没有,不幸的是没有。。。使用内部auth,它可以工作。切换到ext_auth时。登录正在工作,但当我将其他用户添加到我的花名册时,不会向他发送身份验证请求。但名册是存储的。两种情况下的用户完全相同。请帮忙。。。