我正在尝试在使用 Redis 进行 Express 会话的应用程序中使用 passport-twitter 和 passport-facebook 进行身份验证。如果我删除了用于以 express 存储会话的 connect-redis,一切正常,但是使用 Redis 会话,我收到以下错误:
Error: OAuth authentication requires session support
| at Strategy.OAuthStrategy.authenticate
我的代码如下:
app.configure(function(){
app.set('port', process.env.PORT || port);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser("supersecret"));
app.use('/html', express.static('html'));
app.use('/assets', express.static('assets'));
});
if (process.env.REDISCLOUD_URL) {
var rtg = require("url").parse(process.env.REDISCLOUD_URL),
redis = require('redis'),
connectRedisStore = require('connect-redis')(express),
authToken = rtg.auth.split(":")[1];
app.configure(function(){
app.use(
express.session(
{
secret: 'supersecret',
cookie: { maxAge: 60000 },
store: new connectRedisStore({
host: rtg.hostname,
port: rtg.port,
db: authToken[0],
pass: authToken[1]
})
}
)
);
app.use(passport.initialize());
app.use(passport.session(
{
secret: 'supersecret',
store: new connectRedisStore({
host: rtg.hostname,
port: rtg.port,
db: authToken[0],
pass: authToken[1]
})
}
));
});
}
可以一起使用这些吗?
编辑: 在进一步调试中,似乎将 connect-redis 用于快速会话存储并没有将 req.session 设置为任何内容。这就是导致问题的原因。不幸的是,我似乎根本无法让它工作。其他有同样问题的人通过将 cookieParser 行放在会话行上方来修复它,但这就是它一直在我的地方,所以问题是别的。我很茫然。