Angular 6 passport-facebook не работает на Heroku - PullRequest
0 голосов
/ 30 августа 2018

Я использую passport-facebook в приложении MEAN (Angular 6). Он отлично работает в Dev, но не работает на производстве в Heroku.

Когда я нажимаю кнопку facebook на Heroku, URL-адрес кратко меняется с https://example.com/#/login на https://example.com/api/user/facebook, затем снова переключается, и это все, что он делает. В журналах Heroku нет ничего, что позволяло бы предположить, что оно достигло API.

Согласно документам Моя страница входа содержит ссылку:

<a href="/api/user/facebook" class="btn btn-primary">
  <span class="fa fa-facebook"></span> Facebook
</a>

Который потребляет мой API

router.get('/facebook', (req, res, next) => {
console.log('/facebook');
req.session.redirect = req.query.redirectUrl;
passport.authenticate('facebook')(req, res, next);
return;
* * 1016});

Который затем вызывает это

    passport.use(new FacebookStrategy({
    clientID: config.facebookAuth.clientID,
    clientSecret: config.facebookAuth.clientSecret,
    callbackURL: config.facebookAuth.callbackURL
  }, (token, refreshToken, profile, done) => {
      User.findOne({
          'facebook.id': profile.id
        }, (err, user) => {
          if (err) {
            console.log(err);
            return done(err);
          }
          if (user) {
            return done(null, user);
          } else {
            var newUser = new User();
            newUser.facebook.id = profile.id;
            newUser.facebook.token = token;
            newUser.facebook.displayName = profile.displayName;
            newUser.save((err) => {
              done(null, newUser);
            });
          }
        }
      )
    }
  )
)

, который затем вызывает обратный вызов

router.get('/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/#/login' }), (req, res) => {
    console.log('/facebook/callback');
    jwt.sign({
        user: req.user
    }, config.privateKey, { expiresIn: '1h' }, (err, token) => {
        if (err) {
            console.log(err)
        }
        res.cookie('token', token, { maxAge: 3600000 });
        res.redirect(!!req.session.redirect ? '/#' + req.session.redirect : '/#/create');
    });
});

URL-адрес обратного вызова установлен правильно в конфигурации и совпадает с тем, который добавлен в консоль разработчиков Facebook. Я не вижу ничего плохого.

1 Ответ

0 голосов
/ 30 августа 2018

Таким образом, после большой пробной ошибки и многих поисков в Google, я обнаружил, что Facebook будет разрешать только запросы от HTTPS. Несмотря на то, что мой домен Heroku был HTTPS, у него не было сертификата ssl. Я перешел на хобби dyno и применил ssl-сертификат в настройках Heroku, и теперь он работает.

...