2017-03-28 5 views
0

자습서 (here)를 따라 왔지만 클라이언트를 서버에 연결할 수 없습니다. 내가 그 값을 내 Auth0 계정에서 온 재확인 내 환경 변수 (특히 CLIENT_ID, DOMAIN, CLIENT_SECRETCONNECTION)가브로커에 연결하는 중 "잘못된 사용자 이름 또는 암호"오류가 발생했습니다.

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) 

하지만 그들은 좋은 것 : 나는 항상 다음과 같은 오류 메시지 (전체 스택 트레이스를) 얻을 .

MQTT.js의 현재 버전과 일치시키기 위해 클라이언트 코드를 약간 변경했습니다. 코드는 다음과 같습니다.

브로커 코드는 자습서에 표시된 것과 매우 유사합니다. 변경하기 전에이 오류를 해결하고 싶습니다.

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" 

마지막으로 요청이 브로커에 도달했는지 확인했습니다.

+1

사용자를 인증하기 위해 실제로 무엇을하는지 알 수 있도록 브로커 코드도 포함하고 싶을 것입니다. – hardillb

+0

완료, 힌트를 보내 주셔서 감사합니다! –

+0

문제를 발견했습니다. Auth0에서 JsonWebToken Signature Algorithm의 RS256 알고리즘을 지정했습니다. 그러나 Auth0Mosca는 토큰을 확인하는 데 Auth0Mosca를 사용하지 않습니다. 나는 모두에게 동일한 문제에 직면하기 때문에 나중에 대답을 작성하겠습니다. 내가 나 자신을 해결할 수있는 것을 묻는 것에 대해 유감스럽게 생각한다! –

답변

0

나는 자습서의 코드와 함께 저장소를 forked으로 가지고 있으며 최신 버전에 대한 종속성을 업데이트했습니다. 또한 RS256 알고리즘을 사용하여 서명 한 JWT를 검증 할 수있는 가능성을 추가했습니다.

내 문제가 해결되어 모든 사람들이 같은 문제에 직면 할 수 있기를 바랍니다.