尝试连接到代理时出现 "bad username or password" 错误
Getting "bad username or password" error while attempting to connect to broker
我已按照 here 提供的教程进行操作,但无法将客户端连接到服务器。我总是收到以下错误消息(完整堆栈跟踪):
Error: Connection refused: Bad username or password
at MqttClient._handleConnack (${project_dir}/node_modules/mqtt/lib/client.js:760:24)
at MqttClient._handlePacket (${project_dir}/node_modules/mqtt/lib/client.js:300:12)
at process (${project_dir}/node_modules/mqtt/lib/client.js:242:12)
at Writable.writable._write (${project_dir}/node_modules/mqtt/lib/client.js:252:5)
at doWrite (${project_dir}/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:345:64)
at writeOrBuffer (${project_dir}/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:334:5)
at Writable.write (${project_dir}/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:271:11)
at Socket.ondata (_stream_readable.js:528:20)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
我仔细检查了我的环境变量,其值来自我的 Auth0 帐户,(特别是 CLIENT_ID
、DOMAIN
、CLIENT_SECRET
和 CONNECTION
)但是它们看起来不错。
我稍微更改了客户端代码以匹配 MQTT.js 的当前版本。这是代码:
const mqtt = require('mqtt');
const settings = {
port: 1883,
keepalive: 1000,
protocolId: 'MQIsdp', // already tried 'MQTT' with protocol version 4
protocolVersion: 3,
clientId: 'a random id',
username: 'an account at Auth0',
password: 'the password of the account'
}
var client = mqtt.connect('mqtt://localhost', settings);
client.on("connect", function () {
client.subscribe("topic");
console.log("connected");
});
client.on("message", function (topic, message) {
// message is Buffer
console.log(message.toString());
client.end();
});
经纪人代码与教程中的代码非常相似。我想在更改之前解决这个错误。
const mosca = require('mosca')
const Auth0Mosca = require('auth0mosca');
require('dotenv').config();
const settings = {
port: 1883
};
if (!process.env.AUTH0_DOMAIN || !process.env.AUTH0_CLIENT_ID ||
!process.env.AUTH0_CLIENT_SECRET || !process.env.AUTH0_CONNECTION) {
throw 'Make sure you have AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_CLIENT_SECRET and AUTH0_CONNECTION in your .env file';
}
const auth0 = new Auth0Mosca('https://' + process.env.AUTH0_DOMAIN, process.env.AUTH0_CLIENT_ID, process.env.AUTH0_CLIENT_SECRET, process.env.AUTH0_CONNECTION);
// mosca server
const server = new mosca.Server(settings);
server.authenticate = auth0.authenticateWithCredentials();
server.authorizePublish = auth0.authorizePublish();
server.authorizeSubscribe = auth0.authorizeSubscribe();
server.on('ready', setup);
// MQTT server is ready
function setup() {
console.log('Mosca server is up and running');
}
server.on('clientConnected', function(client) {
console.log('New connection: ', client.id);
});
我知道这可能是一个愚蠢的错误或库更新导致的。对于后一种情况,这里是版本:
"auth0mosca": "^0.1.0",
"mosca": "^2.3.0",
"mqtt": "^2.5.0"
最后,我检查了请求是否到达代理。
我有 forked 包含教程代码的存储库,并将其依赖项更新到最新版本。此外,还增加了验证使用 RS256 算法等签名的 JWT 的可能性。
这解决了我的问题,我希望它能帮助面临同样问题的每个人。
我已按照 here 提供的教程进行操作,但无法将客户端连接到服务器。我总是收到以下错误消息(完整堆栈跟踪):
Error: Connection refused: Bad username or password
at MqttClient._handleConnack (${project_dir}/node_modules/mqtt/lib/client.js:760:24)
at MqttClient._handlePacket (${project_dir}/node_modules/mqtt/lib/client.js:300:12)
at process (${project_dir}/node_modules/mqtt/lib/client.js:242:12)
at Writable.writable._write (${project_dir}/node_modules/mqtt/lib/client.js:252:5)
at doWrite (${project_dir}/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:345:64)
at writeOrBuffer (${project_dir}/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:334:5)
at Writable.write (${project_dir}/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:271:11)
at Socket.ondata (_stream_readable.js:528:20)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
我仔细检查了我的环境变量,其值来自我的 Auth0 帐户,(特别是 CLIENT_ID
、DOMAIN
、CLIENT_SECRET
和 CONNECTION
)但是它们看起来不错。
我稍微更改了客户端代码以匹配 MQTT.js 的当前版本。这是代码:
const mqtt = require('mqtt');
const settings = {
port: 1883,
keepalive: 1000,
protocolId: 'MQIsdp', // already tried 'MQTT' with protocol version 4
protocolVersion: 3,
clientId: 'a random id',
username: 'an account at Auth0',
password: 'the password of the account'
}
var client = mqtt.connect('mqtt://localhost', settings);
client.on("connect", function () {
client.subscribe("topic");
console.log("connected");
});
client.on("message", function (topic, message) {
// message is Buffer
console.log(message.toString());
client.end();
});
经纪人代码与教程中的代码非常相似。我想在更改之前解决这个错误。
const mosca = require('mosca')
const Auth0Mosca = require('auth0mosca');
require('dotenv').config();
const settings = {
port: 1883
};
if (!process.env.AUTH0_DOMAIN || !process.env.AUTH0_CLIENT_ID ||
!process.env.AUTH0_CLIENT_SECRET || !process.env.AUTH0_CONNECTION) {
throw 'Make sure you have AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_CLIENT_SECRET and AUTH0_CONNECTION in your .env file';
}
const auth0 = new Auth0Mosca('https://' + process.env.AUTH0_DOMAIN, process.env.AUTH0_CLIENT_ID, process.env.AUTH0_CLIENT_SECRET, process.env.AUTH0_CONNECTION);
// mosca server
const server = new mosca.Server(settings);
server.authenticate = auth0.authenticateWithCredentials();
server.authorizePublish = auth0.authorizePublish();
server.authorizeSubscribe = auth0.authorizeSubscribe();
server.on('ready', setup);
// MQTT server is ready
function setup() {
console.log('Mosca server is up and running');
}
server.on('clientConnected', function(client) {
console.log('New connection: ', client.id);
});
我知道这可能是一个愚蠢的错误或库更新导致的。对于后一种情况,这里是版本:
"auth0mosca": "^0.1.0",
"mosca": "^2.3.0",
"mqtt": "^2.5.0"
最后,我检查了请求是否到达代理。
我有 forked 包含教程代码的存储库,并将其依赖项更新到最新版本。此外,还增加了验证使用 RS256 算法等签名的 JWT 的可能性。
这解决了我的问题,我希望它能帮助面临同样问题的每个人。