我实现序列化和反序列化了吗?
使用Express将RedisStore设置为我的会话存储。这是否意味着我没有实现序列化和反序列化?它会自动发生吗?
当我没有实现这些方法时,我得到下面的Express error - 500错误:无法将用户序列化到会话中。当我实现它们时,我不确定要在反序列化中放入什么。
下面的代码似乎可以工作,但会话不是持久的。我每次访问该网站时都需要登录。
有没有NodeJS + Passport + RedisStore的好例子?
var sessionStore = new RedisStore({
host: rtg.hostname,
port: rtg.port,
db: redisAuth[0],
pass: redisAuth[1]
});
passport.use(new ForceDotComStrategy({
clientID: clientId,
clientSecret: clientSecret,
callbackURL: myurl
},
function(token, tokenSecret, profile, done) {
console.log(profile);
return done(null, profile);
}
));
appSecure.configure('production', function(){
appSecure.use(allowCrossDomain);
appSecure.use(express.cookieParser(expressSecret));
appSecure.use(express.bodyParser());
appSecure.use(express.methodOverride());
appSecure.set('port', port);
appSecure.use(express.session({ secret: expressSecret, store: sessionStore, key:'expressSid', cookie: { maxAge : 604800, domain:'.domain.com'}}));
appSecure.use(passport.initialize());
appSecure.use(passport.session());
appSecure.use(appSecure.router);
appSecure.use(express.static(__dirname + '/public'));
appSecure.use(express.errorHandler());
});
passport.serializeUser(function( user, done ) {
done( null, user.id);
});
passport.deserializeUser(function( user, done ) {
done( null, user );
});
发布于 2014-10-26 12:43:43
假设使用connect-redis
作为会话存储的express-session
的以下配置(使用Express4):
redis = require('redis').createClient(6379, '127.0.0.1');
session = require('express-session');
RedisStore = require('connect-redis')(session);
app.use(session({
store: new RedisStore({
client: redis
}),
secret: 's3cret',
resave: true,
saveUninitialized: true
}));
您可以只告诉passport序列化整个用户对象,而不仅仅是用户id。
passport.serializeUser(function(user, done){
done(null, user);
});
passport.deserializeUser(function(user, done){
done(null, user);
});
整个用户对象将与会话一起保存在Redis中,并作为每个请求的req.user
放在请求上。
https://stackoverflow.com/questions/19268812
复制相似问题