我想通過socketIO通過MySQL數據庫進行身份驗證。我建立了連接並可以查詢結果而沒有問題,但由於某種原因,我無法通過用戶是否被認證到socketio的connection
部分。這個想法是我的應用程序有主持人和觀衆。如果連接到應用程序時未在QueryString
中發送密碼,則該應用程序假定其爲查看器並接受連接。如果發送密碼,則會對數據庫進行檢查並接受/拒絕連接。我想要一個變量傳入connection
,這樣我就可以在我的應用程序事件中使用它。以下是我目前爲止的內容,但顯然data.query['ishost']
沒有傳入應用。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);
});
});
寫入data.query
使其可通過handshakeData訪問。但由於某種原因,它沒有通過應用程序傳遞。任何幫助表示讚賞,謝謝。
很好用。我會看看passport.js。謝謝你的幫助。 –
如果你回退到閃存套接字,這個工作會嗎? – NightWolf
我不確定,我通常會避免使用Flash套接字來簡化我的服務器配置 –