2017-04-06 9 views
6

(私はすでにfbStrategy.passReqToCallback = trueを実行しています) https://scotch.io/tutorials/easy-node-authentication-linking-all-accounts-togetherをオフにしていますが、このソーシャル認証サービスを複数のアプリケーション、たとえば、暖房システムを制御するもの、passport.authenticateに追加のパラメータを渡す方法

基本的に、これらのアプリケーションの1つがサーバーとチェックし、正しいトークンを持っていない場合、このソーシャル認証サービス(social-auth)にリダイレクトされます。ユーザーは、ソーシャルログインボタンの上を押すと、それはそのから到着アプリ何のパラメータをつかみ、req,res,next/auth/facebook/:appid

// send to facebook to do the authentication 
    app.get('/auth/facebook/:appId', function(req,res,next){ 
     passport.authenticate(
      'facebook', { scope : 'email' } 
     )(req,res,next); 
    }); 

reqがシリアライズさユーザレコードであるため、それをパラメータとして追加します。この時点で、ソーシャル認証はユーザーが誰であるかを知らない。

fbStrategy.passReqToCallback = true; 
passport.use(new FacebookStrategy(fbStrategy, 
    function(req, token, refreshToken, profile, done) { 
     var email = (profile.emails[0].value || '').toLowerCase()  
     process.nextTick(function() {... 

認証が完了すると、私は、呼び出し元のアプリにリダイレクトしたいと私は戻って右のサイトに行くことができるように一緒に乗る:appIdのparamを必要としています。

さまざまな社会的状態にアクセスできるcurrentAppIdなどの変数を作成したばかりですが、同時に複数のユーザーが同時に認証された場合は、間違ったアプリにユーザーが戻ってくる可能性があります。他のユーザーのアプリ。そのため、passport.authenticateにパラメータとして移動するにはappIdが必要です。どのように私はどのように把握する必要がありますか? passport.authenticateをラップするか、それとも別のものを修正できますか?

答えて

2

リクエスト自体を使用して、いくつかの追加パラメータをストラテジ機能との間で転送することができます。次の例では、2つのパラメータ_toParam_fromParamがこの問題に使用されています。

app.get('/auth/facebook/:appId', function(req,res,next){ 
    req._toParam = 'Hello'; 
    passport.authenticate(
     'facebook', { scope : 'email' } 
    )(req,res,next); 
}) 


fbStrategy.passReqToCallback = true; 
passport.use(new FacebookStrategy(fbStrategy, 
    function(req, token, refreshToken, profile, done) { 
     console.log(req._toParam); 
     req._fromParam = 'Hello 2'; 
     var email = (profile.emails[0].value || '').toLowerCase()  
    process.nextTick(function() {... 

今後のリクエストでIDを保存する必要がある場合は、現在のリクエストのソケットをキーとしてマップを使用できます。

+0

すごくおかげさまです。私はあなたの最後の提案を '現在の要求の明示ミドルウェアソケット'のような検索で把握しようとしましたが、本当に何も見つかりませんでした。 が来る;任意の参照は、 – mcktimo

+0

実際にそれが passport.use(新しいFacebookStrategy(fbStrategy、 機能(reqは、トークン、refreshToken、プロファイル、行わ){ はconsole.log(req._toParam)が動作しませんでしたがいただければ幸いです app.get( '/ auth/facebook /:appId'、function(req、res、next)){ req._toParam = req.params.appId console.logここで定義されていても、 (req._toParam) 間違ったログを読んでいました – mcktimo

+0

すべてのソーシャル認証戦略について、reqはreq.user – mcktimo

関連する問題