2017-12-27 25 views
0

PassportJS Google OAuth戦略では、いくつかの奇妙な理由から、ユーザーIDをシリアル化してブラウザに送信するためにCookieに送信すると、IDを返してデシリアライズしないあなたはマングースを使用している場合はpassportjs google oauth2 strategy

app.use(cookieSession({ 
    maxAge: 24 * 60 * 60 * 1000, 
    keys: 'dkfehfhgddf' 
})); 
+0

あなたはMongoDBのからのユーザー・データをフェッチするためにマングースを使用していますか? –

+0

ええ、私は使用します。mongodb –

答えて

0

の下に、あなたは、あなたのコードでミスを犯してきた私はconsole.logユーザー、それは詳細に入るためにundefined

passport.deserializeUser((id, done) => { 
    User.findById(id).then((user, done) => { 
     console.log(user); 
     done(null, user); 
    }); 
}); 

を返すときので、私は私のクッキーがされ予期しない動作が発生します。

findById()ファンクションのPromiseバージョンを使用する場合は、後で.exec()に電話をかけて、アクションをディスパッチする必要があります。また、deserializeUserdoneコールバックをシャドーしているので、決して呼び出されません。ここで

は、それがどのように動作するかを示します。

passport.deserializeUser((id, done) => { 
    User.findById(id).exec() 
    .then(user => { 
     if (user) {// user may be null 
     done(null, user); 
     } else { 
     done(new Error("User not found"), null); 
     } 
    }) 
    .catch(error => { 
    done(error, false); 
    }); 
}); 
+0

清算をありがとう。まあ、私はconsole.logのidがmongoに返されたときに、ブラウザから何も返さないということが起こります。したがって、dbはそれを照会するためにidを受け取っていません –

関連する問題