我正在尝试使用passport-twitter和passport-facebook在使用Redis for Express会话的应用中进行身份验证。如果我删除了用于在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行放在会话行之上来修复它,但这就是我一直存在的地方,所以问题就是其他问题。我很茫然。
答案 0 :(得分:4)
好的,经过两天搜索并查看所涉及的所有node_modules的源代码(express,connect,connect-redis),我将我的问题追溯到一个简单的愚蠢错误。
authToken = rtg.auth.split(":")[1];
这里的authToken只提供密码(这是redis用于连接的全部内容)。但是要手动选择数据库,您需要删除[1]并将第一个元素作为数据库名称传递,第二个元素作为传递。希望它可以帮助其他人!