(既に[fbStrategy.passReqToCallback = true
を実行しています)オフにリフティングしています https://scotch.io/tutorials/easy-node-authentication-linking-all-accounts-together このソーシャルを使用したい複数のアプリの認証サービス(例:暖房システムを制御するもの、スプリンクラーをオンにするものなど).
基本的に、これらのアプリの1つがサーバーをチェックし、正しいトークンがない場合、このソーシャル認証サービス(social-auth)にリダイレクトされます。ユーザーがソーシャルログインボタンを押すと、そのアプリのパラメーターを取得し、/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
of req,res,next
は、シリアル化されたユーザーレコードです。この時点で、social-authはユーザーが誰であるかを知りません。
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
パラメータを使用して適切なサイトに戻ることができるようにします。
さて、さまざまな社会的状態からcurrentAppId
のような変数にアクセスできるようにしただけで、通常は機能しますが、複数のユーザーが同時に認証を行っている場合は、ユーザーが間違ったアプリに戻る可能性があります。他の一部のユーザーアプリ。そのため、パラメータとしてpassport.authenticate
に移動するにはappId
が必要です。どのようにしてどこを見ればよいのでしょうか。 passport.authenticate
をラップしたり、その他の方法で変更したりできますか?
リクエスト自体を使用して、ストラテジ関数との間で追加のパラメータを転送できます。次の例では、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を保存する必要がある場合は、現在のリクエストのソケットをキーとするマップを使用できます。