ejabberd:保存不使用外部身份验证脚本的名册

时间:2014-01-06 22:26:56

标签: perl xmpp ejabberd

我已经使用extauth脚本(perl)成功配置了一个ejabberd服务器。 它工作正常,只允许用户从我的mysql数据库。

但是以下功能不再起作用:名册管理,将用户添加到名单,授权用户(将其添加到名册中) 使用内部身份验证它可以工作。两次ejabberd都配置为使用内部遗忘数据库。

请帮我弄清楚,为什么它没有启用extauth。我是否必须在extauth脚本中编写自己的方法? (我真的不想......)

2 个答案:

答案 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