【问题标题】:Passport-Facebook works in localhost but not in Heroku (MERN Stack)Passport-Facebook 在 localhost 中有效,但在 Heroku 中无效(MERN Stack)
【发布时间】:2018-12-03 10:27:30
【问题描述】:

我正在制作一个使用 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 repoHeroku app,所以你可以明白我的意思。

请帮忙,谢谢!!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我刚刚遇到了这个问题,结果证明这是一个代理问题。我将此添加到我的 app.ts 并修复了它:app.enable('trust proxy')

      【讨论】:

        猜你喜欢
        • 2017-03-14
        • 1970-01-01
        • 2014-05-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2013-10-24
        • 1970-01-01
        • 2021-04-03
        相关资源
        最近更新 更多