【发布时间】:2023-01-31 22:28:54
【问题描述】:
我正在运行一个带有一系列锁定多用户聊天的 ejabberd 服务器(仅限会员,需要注册,不允许更改主题或 PM 等) 一个要求是严格识别每个房间中有哪些用户(在向服务器注册时根据他们的用户 ID/帐户 Jid),以及哪个用户发送了消息。
这是如何实现的并不重要,它可以是: a) 通过从 message.getFrom() 获取 userId b) 通过从消息发件人处获取昵称/资源部分,并强制用户可以选择的昵称
在直接消息中,发件人的 JID 将如下所示:
<用户 ID>@<域>/<资源部分>
所以我可以使用 userId (LocalPart) 而不必太担心选择的昵称。
然而,这在多用户聊天中是不可能的,因为 Jid 将显示为:
<roomName>@conference.<domain>/<resourcepart>
发件人的 userId 不存在,所以我必须依赖昵称,但这可以由用户设置为任何内容(并在聊天中随时更改)
有没有办法强制设置昵称? (即设置为与 userId 相同的值)或以其他方式从多用户聊天消息中提取 userId?
【问题讨论】:
-
当您实际上想使用非匿名房间时,您似乎使用了伪匿名房间。可以配置每个房间的设置。
-
我们已经在 ejabberd.yml 中设置了
default_room_options: anonymous: false,但是 smack 客户端仍然只能将 JID 查看为<roomname>@conference.<domain>/<resourcepart>。我错过了什么吗?
标签: xmpp ejabberd smack multiuserchat