socketIO를 통해 MySQL DB를 통해 인증을 시도하고 있습니다. 연결을 설정하고 아무런 문제없이 결과를 쿼리 할 수는 있지만 어떤 이유로 사용자가 인증되었는지 여부를 socketio의 connection
부분으로 전달할 수 없습니다. 내 앱에 호스트 및 뷰어가 있다는 아이디어가 있습니다. QueryString
에 비밀번호를 전송하지 않고 앱에 연결하면 앱은 뷰어로 간주되어 연결을 수락합니다. 암호가 전송되면 DB와 대조하여 연결을 허용/거부합니다. 변수를 connection
에 전달하여 내 앱 이벤트 내부에서 사용할 수있게하려고합니다. 여기에 내가 지금까지 가지고있는 것이 있지만 분명히 data.query['ishost']
은 앱에 전달되지 않습니다. data.query
에 쓰기SocketIO + MySQL 인증
sio.configure(function() {
sio.set('authorization', function (data, accept) {
UserID = data.query['username'];
try {
UserID = UserID.toLowerCase();
} catch(err) {
return accept("No WebBot Specified. ("+err+")", false);
}
// if not sending a password, skip authorization and connect as a viewer
if (data.query['password'] === 'undefined')
{
return accept(null, true);
}
// if sending a password, attempt authorization and connect as a host
else
{
client.query(
'SELECT * FROM web_users WHERE username = "'+UserID+'" LIMIT 1',
function selectCb(err, results, fields) {
if (err) {
throw err;
}
// Found match, hash password and check against DB
if (results.length != 0)
{
// Passwords match, authenticate.
if (hex_md5(data.query['password']) == results[0]['password'])
{
data.query['ishost'] = true;
accept(null, true);
}
// Passwords don't match, do not authenticate
else
{
data.query['ishost'] = false;
return accept("Invalid Password", false);
}
}
// No match found, add to DB then authenticate
else
{
client.query(
'INSERT INTO web_users (username, password) VALUES ("'+UserID+'", "'+hex_md5(data.query['password'])+'")', null);
data.query['ishost'] = "1";
accept(null, true);
}
client.end();
}
);
// Should never reach this
return accept("Hacking Attempt", false);
}
// Definitely should never reach this
return accept("Hacking Attempt", false);
});
});
는 handshakeData를 통해 액세스 할 수 있습니다. 하지만 어떤 이유로 애플 리케이션을 통과하지 못했습니다. 도움이된다면 고맙습니다.
위대한 작품. 나중에 여권을 살펴볼거야 .js. 당신의 도움을 주셔서 감사합니다. –
플래시 소켓으로 돌아 가면이 기능을 사용할 수 있습니까? – NightWolf
잘 모르겠습니다. 저는 일반적으로 플래시 소켓을 피하여 서버 구성을 간소화합니다. –