使用带有connect-redis的passport和OAuth

时间:2013-05-13 14:02:15

标签: node.js express oauth passport.js

我正在尝试使用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行放在会话行之上来修复它,但这就是我一直存在的地方,所以问题就是其他问题。我很茫然。

1 个答案:

答案 0 :(得分:4)

好的,经过两天搜索并查看所涉及的所有node_modules的源代码(express,connect,connect-redis),我将我的问题追溯到一个简单的愚蠢错误。

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

这里的authToken只提供密码(这是redis用于连接的全部内容)。但是要手动选择数据库,您需要删除[1]并将第一个元素作为数据库名称传递,第二个元素作为传递。希望它可以帮助其他人!