Utiliser passeport et OAuth avec connect-redis

J’essaie d’utiliser passport-twitter et passport-facebook pour l’authentification dans une application utilisant Redis pour des sessions Express. Si je supprime le connect-redis pour stocker des sessions dans express, tout fonctionne correctement, mais avec les sessions Redis, l’erreur suivante apparaît:

Error: OAuth authentication requires session support | at Strategy.OAuthStrategy.authenticate 

Mon code est ci-dessous:

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

Est-il possible de les utiliser ensemble?

Edit: lors du débogage ultérieur, il semble que l’utilisation de connect-redis pour le magasin de sessions express ne règle rien à req.session. C’est ce qui cause le problème. Malheureusement, je n’arrive pas à le faire fonctionner du tout. D’autres personnes ayant le même problème l’ont corrigé en plaçant la ligne cookieParser au-dessus de la ligne de session, mais c’est toujours dans la mienne, le problème est donc différent. Je n’arrive pas.

Ok, après deux jours de recherche et de fouille dans le code source de tous les nœuds_modules impliqués (express, connect, connect-redis), j’ai retrouvé mon problème à une simple faute de frappe.

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

AuthToken ne fournit ici que le mot de passe (qui est tout ce que redis utilise pour se connecter). Mais pour choisir manuellement une firebase database, vous devez supprimer le [1] et transmettre le premier élément en tant que nom de la firebase database et le second en tant que réussite. J’espère que ça aide quelqu’un d’autre là-bas!