1

nodejs レスト サービスを構築し、認証システムをセットアップしたいと考えています。残りのサービスは、からの ajax 呼び出しによってアクセスされます。

$.get("http://localhost:3000/user",{},function(data){console.log(data)});

ログインが行われるか、または ajax 呼び出しまたはブラウザーからの直接呼び出しのいずれかであり、セッションまたは Cookie に固執することはできません。

ログインに成功すると、次の呼び出し

$.get("http://localhost:3000/user",{},function(data){console.log(data)});

サーバーは私が誰であるかを知りません。

node.jsファイル

app.post('/login', function (req, res) {

    if ('undefined' === typeof req.body.password || 'undefined' === typeof req.body.user) {

        res.redirect(req.headers.referer + '?error=-2');
        return;

    }

    mysql = tools.mysql();

    var user = req.body.user,
        password = crypto.createHash('md5').update(req.body.password).digest("hex"),
        result = {
            result: 0
        },
        check,
        id,
        value;

    mysql.query('SELECT id, level, nome FROM chaves_proatlantico.utilizadores WHERE email = ? and password = ?;', [user, password])
        .on('result', function (rows) {

            check = crypto.createHash('md5').update(req.socket.remoteAddress + '' + Date.now()).digest("hex");
            id = crypto.createHash('md5').update(user + password).digest("hex");
            value = {
                id: id,
                check: check
            };
            req.session.user = rows.id;
            req.session.level = rows.level;
            req.session.name = rows.nome;
            req.session.id = id;
            req.session.check = check;

            result.result = 1;

            res.cookie('restid', JSON.stringify(value), { maxAge: 900000, httpOnly: false });

            mysql.query('UPDATE chaves_proatlantico.utilizadores SET code = ? WHERE email = ? and password = ?;', [check, user, password]).on('end', function () {
                tools.mysqlend();
            })
                .on('end', function () {
                    tools.mysqlend();
                    res.redirect(req.headers.referer + '?id=' + id + '&check=' + check);
                })
                .on('error', function (err) {
                    result = {result: -1, data: err.code};
                });

        })
        .on('end', function () {
            if (1 !== result.result) {
                tools.mysqlend();
                res.redirect(req.headers.referer + '?error=' + result.result);
            }
        })
        .on('error', function (err) {
            result = {result: -1, data: err.code};
        });

});
app.get('/user', tools.requiredLogin, function (req, res) {

      var result = {
                result: 1,
                data: {
                    name: req.session.name
                }
            };
        tools.json(req, res, result);
    });
4

0 に答える 0