2

これが私のばかげた nodejs モジュールです。呼び出されるとpassport.authenticate('facebook')、フリーズします。

Express 4.2.0 を使用しています。何か案は?

認証呼び出しはブロックされません。関数からどのように戻ると思いますか?

私が見たすべての例authenticateは app.js で呼び出します。app.js で認証戦略を構成したくありません。

var express = require('express');
var router = express.Router();

var passport = require('passport')
var facebookStrategy = require('passport-facebook').Strategy;

passport.use(new facebookStrategy({
        clientID: "xxx",
        clientSecret: "xxx",
        callbackURL: "http://localhost:3000/auth/facebook/callback"
    },
    function(accessToken, refreshToken, profile, done) {

    }
));

router.get('/', function(req, res) {
    passport.authenticate('facebook');
});


module.exports = router;
4

1 に答える 1

4

コールバック関数を呼び出す必要があります。それがないと、 の呼び出しがシステムの処理方法であるため、ハングアップします。今のところスタブ コードしかない場合でも、少なくとも制御フローを適切に処理し続ける必要があります。done()facebookStrategydone()done()

次に、ミドルウェア関数をpassport.authenticate 返すため、直接呼び出すのではなく、express に渡します。

router.get('/', passport.authenticate('facebook')); //don't wrap here

上記のrouter.getコールバックについて間違っている 2 番目の部分は、応答しないことです。これは、エクスプレス ハングを発生させる方法でもあります。

それらが修正されたら、Facebook コールバックを処理するためにもう 1 つのルートが必要になります。

var options = {
  successRedirect: '/home',
  failureRedirect: '/bummer-dude'
};
router.get('/auth/facebook/callback', passport.authenticate('facebook', options));
于 2014-10-21T00:02:50.023 に答える