Passport-Facebook在localhost上有效,但在Heroku中不可用(MERN堆栈)

时间:2018-06-24 19:46:53

标签: node.js reactjs authentication passport.js passport-facebook

我正在用Facebook登录创建一个简单的应用程序。它在localhost中可以正常工作。但是,在部署到Heroku之后,“登录”按钮仅刷新页面,浏览器停留在https://voting-app-28.herokuapp.com/auth/facebook而不进行重定向。我已经尝试了所有方法,并将URL也添加到了Facebook上的有效OAuth重定向URI中。控制台中没有错误。

我的passport.js

passport.serializeUser((user, done) => {
  done(null, user.id);
});

passport.deserializeUser((id, done) => {
  User.findById(id).then(user => done(null, user));
});

passport.use(
  new FacebookStrategy(
    {
      clientID: keys.facebookClientID,
      clientSecret: keys.facebookClientSecret,
      callbackURL: '/auth/facebook/callback',
      profileFields: ['id', 'name'],
      proxy: true
    },
    (accessToken, refreshToken, profile, done) => {
      User.findOne({ facebookId: profile.id }).then(user => {
        if (user) {
          return done(null, user);
        } else {
          new User({ facebookId: profile.id })
            .save()
            .then(user => done(null, user));
        }
      });
    }
  )
);

我的authRoutes.js

  app.get('/auth/facebook', passport.authenticate('facebook'));

  app.get(
    '/auth/facebook/callback',
    passport.authenticate('facebook'),
    (req, res) => {
      res.redirect('/');
    }
  );

这是我的Github repoHeroku app,所以您可以明白我的意思。

请帮助并谢谢您!

1 个答案:

答案 0 :(得分:2)

我有同样的问题。经过多次Google搜索后,我发现Facebook仅允许来自HTTPS的请求。即使我的Heroku域是HTTPS,它也没有ssl证书。我升级为爱好测功机,并在Heroku的设置中应用了ssl证书,现在可以使用了。