SocketIO + MySQL-Authentifizierung

Ich bin versucht, die Authentifizierung über eine MySQL-DB über socketIO. Ich habe die Verbindung hergestellt und können Abfrageergebnisse, ohne ein Problem, aber aus irgendeinem Grund kann ich nicht gehen, ob der Benutzer authentifiziert ist in der connection Teil von socketio. Die Idee ist, meine app hat Gastgeber und Zuschauer. Wenn Sie eine Verbindung zu der app, ohne dass ein Kennwort in die QueryString die app nimmt seine Zuschauer und nimmt Verbindung. Wenn Sie ein Kennwort gesendet wird, wird geprüft, gegen die DB und akzeptiert/verwirft die Verbindung. Ich möchte eine variable zu übergeben, in der connection damit ich es in meine apps Ereignisse. Hier ist, was ich bisher aber offenbar die data.query['ishost'] ist nicht vorbei in der app.

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);
    });
});

Schriftlich an die data.query macht es zugänglich durch handshakeData. Aber aus irgendeinem Grund nicht übergeben werden, über die app. Jede Hilfe ist willkommen, danke.

InformationsquelleAutor Ed R | 2012-05-15
Schreibe einen Kommentar