1

私は Facebook アプリを作成しましたが、私だけが使用していました。今、私はそれをライブにしましたが、私以外は誰もログインできません.

次のエラーが発生します。

FacebookTokenError: This authorization code has been used.
 at Strategy.parseErrorResponse (/var/www/html/project/node_modules/passport-facebook/lib/strategy.js:199:12)
 at Strategy.OAuth2Strategy._createOAuthError (/var/www/html/project/node_modules/passport-facebook/node_modules/passport-oauth2/lib/strategy.js:345:16)
 at /var/www/html/project/node_modules/passport-facebook/node_modules/passport-oauth2/lib/strategy.js:171:43
 at /var/www/html/project/node_modules/passport-facebook/node_modules/passport-oauth2/node_modules/oauth/lib/oauth2.js:177:18
 at passBackControl (/var/www/html/project/node_modules/passport-facebook/node_modules/passport-oauth2/node_modules/oauth/lib/oauth2.js:123:9)
 at IncomingMessage.<anonymous> (/var/www/html/project/node_modules/passport-facebook/node_modules/passport-oauth2/node_modules/oauth/lib/oauth2.js:143:7)
 at IncomingMessage.EventEmitter.emit (events.js:117:20)
 at _stream_readable.js:920:16
 at process._tickCallback (node.js:415:13)

ここで何が問題になる可能性がありますか。アプリはライブです。

4

4 に答える 4

1

FacebookStrategy コールバック内で done() を呼び出す必要があります。テストのために、あなたはただ行うことができます

function(accessToken, refreshToken, profile, done) {
console.log("Auth done");
done(null, profile);
}

ここで参照できます:https://github.com/jaredhanson/passport/issues/108

于 2015-10-23T13:22:01.170 に答える
1

Jeroen Pelgrims からの情報を使用して、セッションレス Facebook ログインを使用する Express に REST API があります。それがすることは次のとおりです。

Facebook ストラテジーでログイン ユーザーデータベースにトークンと情報を保存 ベアラーログインにそのトークンを使用 コールバックページでパスポート-facebook認証が使用するものは次のとおりです:passport.authenticate('strategy', options, user, error)

動作はそのエラーを正しくスローしています! @jsilveira がコメントで述べたように、ユーザーが 2 回ログインするとエラーが発生します...

私の答えは非常に簡単です、私はエラーをキャッチします...そこを読んでください...

// Facebook 認証とログインのルート

 router.get('/auth/facebook',
        passport.authenticate('facebook', {session: false, scope : ['email'] })
    );

// handle the callback after facebook has authenticated the user
router.get('/auth/facebook/callback',
    passport.authenticate('facebook',  { session: false, failureRedirect : '/'}),

    // on succes
    function(req,res) {
        // return the token or you would wish otherwise give eg. a succes message
        res.render('json', {data: JSON.stringify(req.user.access_token)});
    },

    // on error; likely to be something FacebookTokenError token invalid or already used token,
    // these errors occur when the user logs in twice with the same token
    function(err,req,res,next) {
        // You could put your own behavior in here, fx: you could force auth again...
        // res.redirect('/auth/facebook/');
        if(err) {
            res.status(400);
            res.render('error', {message: err.message});
        }
    }
);

ただし、再度ログイン/承認するだけにしたい場合は、エラー部分にコールバックまたはリダイレクトを挿入できます。

これにより、皆さんが抱えているいくつかの問題が明確になることを願っています。万が一、ご質問やご要望がございましたら、遠慮なくお申し付けください。情報は私のプロフィールにあります。

PS: stackoverflow.com には、次のような再認証の回答があります。

app.post('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
      if (err) {
      return next(err); // will generate a 500 error
      }
      // Generate a JSON response reflecting authentication status
      if (! user) {
      return res.send({ success : false, message : 'authentication failed' });
  }
  return res.send({ success : true, message : 'authentication succeeded' });
  })(req, res, next);
});
于 2015-10-23T12:07:58.970 に答える