2013-03-22 2 views
3

На сегодняшний день я использую память MemoryStore по умолчанию для своих экспресс-сессий. Все работает отлично, за исключением того, что все сеансовые данные теряются между перезапусками. Поэтому я стараюсь, чтобы мои сеансы работали с Redis & Connect-Redis.Экспресс + Паспорт + Повторные сеансы?

Вот часть моего кода, который касается сеанса конфигурации с Redis:

var express = require("express"), 
    app = module.exports = express(), 
    passport = require("./passport"), 
    http = require("http"), 
    RedisStore = require("connect-redis")(express), 
    redis = require("redis").createClient(); 

app.configure(function(){ 

    app.set("passport", passport); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
     secret: "I can haz working sessions?", 
     store: new RedisStore({ client: redis }) 
    })); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    ... 

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

Для справки, вот функции, которые я использую в паспорте для сериализации/десериализации сессии:

passport.serializeUser(function(user, done) { 
    done(null, { 
     id : user.id, 
     type : user.type, 
     firstname: user.firstname, 
     lastname: user.lastname 
    }); 
}); 

passport.deserializeUser(function(user, done) { 
    done(null, user); 
}); 

Любые советы о том, где я неправильно? Необходимо ли модифицировать паспорт serializeUser/deserializeUser для работы с redis? Или я пропустил что-то еще?

Спасибо (заблаговременно) за вашу помощь.

+1

Проверьте средства разработки вашего браузера и убедитесь, что cookie действительно установлен (а также отправлен сервером обратно на сервер). Ваш код выглядит нормально. – robertklep

+0

Похоже на то же самое, что у меня есть с сеансами cookie: http://stackoverflow.com/questions/19011531/using-cookiesession-with-passport –

+0

@ user1031947: Могли ли вы решить вашу проблему? Пожалуйста обновите. – moaglee

ответ

0

Одна возможность: может быть, ваше приложение не может подключиться к Redis? Я обнаружил, что, когда мой redis-сервер не работал, я испытал симптом, который вы описываете (тихо не удается установить файлы cookie).

Помимо проверки того, что он работает, убедитесь, что ваш Node-сервер действительно может подключиться к нему, то есть нет правил брандмауэра, которые вас не устраивают.

Удачи вам!

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