2013-05-13 50 views
0

我正在嘗試在使用Redis Express會話的應用程序中使用passport-twitter和passport-facebook進行身份驗證。如果我刪除的Connect-redis的在快遞存儲會話,一切工作正常,但Redis的會議上,我得到以下錯誤:與connect-redis一起使用護照和OAuth

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] 
      }) 
     } 
    )); 
}); 
} 

是它可以一起使用這些嗎?

編輯: 在進一步調試,似乎使用連接,Redis的快車的會話存儲不設置req.session任何東西。這是導致問題的原因。不幸的是,我似乎無法讓它工作。其他具有相同問題的人通過將cookieParser行放在會話行上方來修復它,但這正是它始終存在於我的行列的地方,所以問題是另一回事。我很茫然。

+0

我應該注意到我的LocalStrategy在Redis商店中正常工作; Google認證也是如此。只有推特和臉書不起作用。 – electrichead 2013-05-13 14:33:52

回答

4

好的,經過兩天的搜索並查看所有涉及的node_modules的源代碼(express,connect,connect-redis)後,我追蹤到我的問題是一個簡單的錯字。

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

這裏的authToken只是提供密碼(這是redis用來連接的所有東西)。但要手動選擇數據庫,需要刪除[1]並將第一個元素作爲db名稱,第二個作爲pass。希望它能幫助別人!