2016-03-11 5 views
1

У меня немного кошмар с настройкой пользовательских сеансов в NodeJS. Я искал жизнь из нее и прочитал здесь целый ряд статей, но ни одно из решений не работает для меня.Узел JS Сессия не сохраняется

Моя установка:

app.use(cookieParser()); 
    app.use(session({ 
     pool: true, 
     key: 'cgtracker.cookie', 
     resave: false, 
     saveUninitialized: false, 
     secret: '1234567890QWERTY', 
     cookie: {maxAge: 100000}, 
     store: new MySQLStore(options), 
    })); 

Я использую MySQLStore ('экспресс-MySQL-сессии'). Это связано с моей Db и работает, как expected.Running это ->

router.post('/Login', function (req, res) { 
     logger.log("info", "Attempting Login for user: " + req.body.Username); 
     req.session.username = req.body.Username; 
     res.send('Created session for: ' + req.body.Username); 

Создает запись в моей сессии таблицы для сеанса с истечением.

| 2gbIWNuFVcE3GmjrFMEctdZlvBMufqiN | 1457713316 | {"cookie":{"originalMaxAge":100000,"expires":"2016-03-11T16:21:55.580Z","httpOnly":t              rue,"path":"/"},"username":"chris.rayner"} 

Моя проблема в том, что я не могу получить сеанс ни в какой другой функции. Простой тест здесь:

router.get('/', function (req, res) { 
     logger.log("info", "Current Session: " + JSON.stringify(req.session)); 
} 

я получаю:

Current Session: {\"cookie\":{\"originalMaxAge\":100000,\"expires\":\"2016-03-11T16:24:15.212Z\",\"httpOnly\":true,\"path\":\"/\"}}","timestamp":"2016-03-11T16:22:35.212Z"}` 

Где мои данные сессии ушли ?!

Я чувствую, что мне не хватает чего-то очевидного, но я пробовал так много вариаций в исследованиях. Я становлюсь немного потерянным.

My cookie cookie сконструирован правильно, хотя значение, похоже, не коррелирует с каким-либо из SessionID, хранящимся в таблице сеансов.

Любая помощь/идеи/предложения были бы очень оценены!

Chris

+0

Итак, похоже, проблема немного глубже. Снятие кода обратно на основы. Я не могу создать файл cookie в запросе POST, он никогда не хранится в браузере и, следовательно, недоступен для будущих запросов. Работает отлично в GET, но я хотел бы установить этот файл cookie в моей функции POST входа. – CRayner

ответ

0

Нашли решение!

Хром (и, возможно, firefox, но не проверен) по умолчанию блокирует куки в POST-запросах при отправке в «неизвестный» домен. Некоторая функция безопасности в клиентских приложениях CORS ...

Чтобы исправить эту серверную сторону: -Обновить Cors с авторизованным источником (-ами) для браузера.

app.use(cors({ origin: config.origin, *(I am using an array for multiple allows origins)* credentials: true }));

Чтобы исправить этот Client Side: Добавить это параметры в заголовке POST для функции.

xhrFields: { withCredentials: true }

ИЛИ

Добавьте это к модели конструктора для класса.

$.ajaxPrefilter(function(options, originalOptions, jqXHR) { options.xhrFields = { withCredentials: true }; });

После этого, печенье, сделанные в запросах POST успешно «Стик» функциональности браузера и сессии будет идти!

Какая боль! Надеюсь, что это решение поможет кому-то еще сэкономить время на их проекте!

Смежные вопросы