我当前正在尝试使用Stanza.js https://github.com/legastero/stanza设置XMPP客户端
我有一个工作的服务器,它接受来自Gajim客户端的连接,但是当尝试使用Stanza.js client.connect方法连接时,服务器打开一个websocket连接,但没有身份验证事件,或者启动的会话被触发。
服务器日志不显示任何明文密码身份验证尝试。
我如何才能实际看到任何节日志来调试此问题?
import * as XMPP from 'stanza';
const config = { credentials: {jid: '[jid]', password: '[password]'}, transports: {websocket: '[socketurl]', bosh: false} };
const client = XMPP.createClient(config)
client.on('raw:*', (data) => {
console.log('data', data)
})
client.connect();onconnect事件确实会触发,但这是唯一会触发的事件。有没有一种方法可以手动触发文档中没有提到的身份验证?
发布于 2021-02-23 06:34:55
原始事件处理程序应该能够为您提供所需的日志记录-但在您的代码示例中,您没有正确地调用它。尝试以下操作。
client.on('raw:*', (direction, data) => {
console.log(direction, data)
})作为参考,原始数据事件处理程序的回调的docs状态为
(direction: incoming | outgoing, data: string) => void因此,您要查找的数据在第二个参数中,但是您的回调只有一个参数(只有一个方向字符串“传入”或“传出”,尽管您已将该参数命名为" data ")。
一旦您修复了日志记录,我希望您将看到流立即终止,并出现流错误。您的配置不正确。jid和password应该是顶级字段。查看节示例代码。对于createClient的选项-没有凭证对象。尝试以下操作:
const config = { jid: '[jid]', password: '[password]', transports: {websocket: '[socketurl]', bosh: false} };由于您的用户名和密码隐藏在不正确的凭据对象后面,因此stanza.io看不到它们,您实际上是在尝试不使用用户名和密码进行连接,因此甚至不会尝试进行身份验证。
发布于 2021-04-01 03:59:15
这个问题恰好是由配置问题引起的。
jabber服务器使用的是普通身份验证。在客户端定义文件中添加额外的一行会有所帮助。此外,添加client.on('*',console.log)可提供更完整的服务器日志。
client.sasl.disable('X-OAUTH2')发布于 2021-02-19 21:03:00
我如何才能实际查看任何节日志来调试此问题?
如果连接未加密,则可以使用以下工具嗅探XMPP通信
sudo tcpflow -i lo -Cg port 5222您可以强制ejabberd不允许加密,这样您的客户端就不会使用加密,您就可以读取网络流量。
或者,您可以在ejabbed.yml中设置此设置,但它可能会生成大量日志消息:
loglevel: debughttps://stackoverflow.com/questions/66250139
复制相似问题