首页 > 解决方案 > Passport-Facebook 在 localhost 中有效,但在 Heroku 中无效(MERN Stack)

问题描述

我正在使用 Facebook 登录制作一个简单的应用程序。它在本地主机中运行良好。但是,在部署到 Heroku 之后,登录按钮只是刷新页面,浏览器保持打开状态https://voting-app-28.herokuapp.com/auth/facebook而不重定向。我已经尝试了所有方法,并将 URL 添加到 facebook 上的有效 OAuth 重定向 URI 中。控制台中没有错误。

我的护照.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 存储库Heroku 应用程序,因此您可以了解我的意思。

请帮忙,谢谢!!

标签: node.jsreactjsauthenticationpassport.jspassport-facebook

解决方案


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


推荐阅读