Задать вопрос

Node JS + Socket.io Как получить конкретное значение cookie?

Пытаюсь получить конкретное значение cookie для авторизации.
io.configure(function (){
    io.set('authorization', function (handshakeData, callback) {
        var cook = handshakeData.headers.cookie;
        console.log(cook);
        callback(null, true); // error first callback style
    });
});


Получаю то ли массив, то ли строку. При использовании .indexOf() и .split() сервер не поднимается.

В первом случае пишет: TypeError: Cannot call method 'indexOf' of undefined
Во втором: TypeError: Cannot call method 'split' of undefined

Мне нужно получить для проверки всего одну запись cookie, а не целый массив.
  • Вопрос задан
  • 8420 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 2
Может это вам поможет.

Дело в том что кук в хедере может быть несколько, вот вам и приходит строка или массив.
Для того что бы получить конкретную куку то ответ нужно распарсить а потом уже брать нужную. В ссылке выше как раз все это есть.

Как-то так...
io.configure(function (){
    io.set('authorization', function (handshakeData, callback) {
        var cookies = parseCookies(handshakeData);
        console.log(cookies);
        callback(null, true); // error first callback style
    });
});

function parseCookies(request) {
    var list = {},
        rc = request.headers.cookie;

    rc && rc.split(';').forEach(function(cookie) {
        var parts = cookie.split('=');
        list[parts.shift().trim()] = unescape(parts.join('='));
    });

    return list;
}
Ответ написан
@Burgul Автор вопроса
//Проверка на авторизацию
io.configure(function (){
    io.set('authorization', function (handshakeData, callback) {
        function parseCookies () {
            var list = {},
                rc = handshakeData.headers.cookie;

            rc && rc.split(';').forEach(function( cookie ) {
                var parts = cookie.split('=');
                list[parts.shift().trim()] = unescape(parts.join('='));
            });
            return list;
        }
        var cookies = parseCookies();
        //Проверяем, определена ли конкретная кука
        if(cookies['login'] != undefined){
                callback(null, true);
        }
        else{
            callback(null, false);
        }
    });
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы