Node.js 将passport和OAuth与connect redis一起使用

Node.js 将passport和OAuth与connect redis一起使用,node.js,express,oauth,passport.js,Node.js,Express,Oauth,Passport.js,我正在尝试使用passport twitter和passport facebook在一个使用Redis进行快速会话的应用程序中进行身份验证。如果在express中删除用于存储会话的connect redis,一切正常,但使用redis会话时,会出现以下错误: Error: OAuth authentication requires session support | at Strategy.OAuthStrategy.authenticate 我的代码如下: app.configure(fun

我正在尝试使用passport twitter和passport facebook在一个使用Redis进行快速会话的应用程序中进行身份验证。如果在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]
            })
        }
    ));
});
}
有可能同时使用这些吗

编辑:
在进一步调试时,似乎对express会话存储使用connect redis并没有将req.session设置为任何值。这就是造成问题的原因。不幸的是,我似乎根本无法让它工作。其他有相同问题的人通过将cookieParser行放在会话行之上来修复它,但这是我的问题所在,所以问题是其他的。我不知所措。

好的,经过两天的搜索和翻阅所有涉及的node_模块(express、connect、connect redis)的源代码,我发现我的问题只是一个简单的愚蠢的打字错误

authToken = rtg.auth.split(":")[1];

这里的authToken只提供了密码(这是redis用于连接的全部密码)。但是,要手动选择数据库,需要删除[1]并将第一个元素作为db name传入,第二个元素作为pass传入。希望它能帮助其他人

好的,经过两天的搜索和翻阅所有涉及的node_模块(express、connect、connect redis)的源代码后,我发现我的问题是一个简单的愚蠢的打字错误

authToken = rtg.auth.split(":")[1];

这里的authToken只提供了密码(这是redis用于连接的全部密码)。但是,要手动选择数据库,需要删除[1]并将第一个元素作为db name传入,第二个元素作为pass传入。希望它能帮助其他人

我应该注意,我的LocalStrategy与Redis商店配合得很好;谷歌授权也是如此。只有twitter和facebook不起作用;谷歌授权也是如此。只有twitter和facebook不起作用。