46

したがって、パスポート-Facebook戦略の構成は次のとおりです。

    passport.use(new FacebookStrategy({
        clientID: ".....",
        clientSecret: ".....",
        callbackURL: "http://localhost:1337/register/facebook/callback",
    },
    facebookVerificationHandler
    ));

そして、ここに facebookVerificationHandler があります:

var facebookVerificationHandler = function (accessToken, refreshToken, profile, done) { 
    process.nextTick(function () {    
        .......
    });    
};

facebookVerificationHandlerでリクエストオブジェクトにアクセスする方法はありますか?

ユーザーは LocalStrategy を使用してサイトに登録されていますが、ソーシャル アカウントを追加して、それらのアカウントをローカル アカウントに関連付けることができます。上記のコールバックが呼び出されると、現在ログインしているユーザーは既に req.user で使用できるため、ユーザーを Facebook アカウントに関連付けるために req にアクセスする必要があります。

これはそれを実装する正しい方法ですか、それとも別の方法を検討する必要がありますか?

ありがとう。

4

3 に答える 3

97

オプションがありpassReqToCallbackます。詳細については、このページの下部を参照してください: http://passportjs.org/guide/authorize/

于 2013-12-04T05:21:26.400 に答える
15

このため、アプリケーションの起動時に戦略を設定する代わりに、通常はリクエストがあったときに戦略を設定します。例えば:

app.get(
    '/facebook/login'
    ,passport_setup_strategy()
    ,passport.authenticate()
    ,redirect_home()
);

var isStrategySetup = false;
var passport_setup_strategy = function(){
    return function(req, res, next){
        if(!isStrategySetup){

            passport.use(new FacebookStrategy({
                    clientID: ".....",
                    clientSecret: ".....",
                    callbackURL: "http://localhost:1337/register/facebook/callback",
                },
                function (accessToken, refreshToken, profile, done) { 
                    process.nextTick(function () {    
                        // here you can access 'req'
                        .......
                    });    
                }
            ));

            isStrategySetup = true;

        }

        next();
    };
}

これを使用すると、検証ハンドラーでリクエストにアクセスできます。

于 2013-12-03T02:41:27.177 に答える