1

既存のユーザーベースがあり、Facebook/Twitter アカウントとリンクできるようにしたいと考えています。私はpassportjsを使用できるように見えますが、問題があります。

現在、ユーザー/パスにURLパスがあり、ローカル戦略を実行してユーザーを検索しています。次に、私が推測する承認を実行したいと思います。許可するかどうかを尋ねる facebook promopts を取得し、accessToken でコールバックをヒットしましたが、リクエスト情報を取得する方法がわかるように、そのトークンをデータベース内の既存のユーザーに関連付ける方法がありません。

passport.serializeUser(function(user, done) {
  done(null, user);
});

passport.deserializeUser(function(user, done) {
    Users.findOne({_id: user._id}, function(err, user) {
        return done(err, user);
    });
});

passport.use(new LocalStrategy({ passReqToCallback: true }, function(req, username, password, done) {
        Users.findOne({_id: username}, function(err, user) {
            return done(null, user);
        });
    }
));


passport.use(new FacebookStrategy({
    clientID: 'xxxx',
    clientSecret: 'xxxx',
    callbackURL: "http://xxxx/facebook/callback",
    passReqToCallback: true
  },
  function(req, accessToken, refreshToken, profile, done) {

    //  How would I get access to the user found in the LocalStrategy here so I can associate the accessToken to the user in the db?
    console.log(accessToken);
    console.log(refreshToken);

    var err = null;
    var user = {};
    return done(err, user);

  }
));

server.get('/facebook', passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }),
    function (req, res) {
        if (req && req.user) {
            passport.authorize('facebook', { scope: ['publish_actions','manage_pages'] })(req, res);
        }
});

server.get('/facebook/callback',
  passport.authorize('facebook', { failureRedirect: '/facebook/failure', successRedirect: '/facebook/success' }),
  function(req, res) {
    res.redirect('/');
  }
);
4

2 に答える 2

0

Facebook コールバックでリダイレクト先の URL を確認し、ローカルでログインしてから Facebook からコールバックにリダイレクトされるまでの間に異なるセッションを生成していないことを確認してください。

私は同様の問題に悩まされていましたが、それはリダイレクトが異なっていたためです。

たとえばhttp://localhost:3000、Chrome に移動してログインし、req.user が正しく設定されていました。私の Facebook dev 設定と Passport 設定で、私は にリダイレクトしていましたhttp://hostname.local:3000/auth/facebook

ローカル ログインとリダイレクトが同じセッションを共有している限り、req.user を利用できるはずです。

于 2013-06-21T08:11:01.520 に答える