首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular 6 passport-facebook在Heroku上不起作用

Angular 6 passport-facebook在Heroku上不起作用
EN

Stack Overflow用户
提问于 2018-08-30 06:29:00
回答 1查看 232关注 0票数 0

我在一个均值堆栈应用程序(Angular 6)中使用passport-facebook。它在dev中工作得很好,但在Heroku的生产中却不起作用。

当我点击Heroku上的facebook按钮时,网址会短暂地从https://example.com/#/login变成https://example.com/api/user/facebook,然后再切换回来,这就是它所做的一切。Heroku日志中没有任何内容表明它已到达api。

根据docs,我的登录页面包含一个链接:

代码语言:javascript
复制
<a href="/api/user/facebook" class="btn btn-primary">
  <span class="fa fa-facebook"></span> Facebook
</a>

它会消耗我的api

代码语言:javascript
复制
router.get('/facebook', (req, res, next) => {
console.log('/facebook');
req.session.redirect = req.query.redirectUrl;
passport.authenticate('facebook')(req, res, next);
return;

});

然后,它调用这个

代码语言:javascript
复制
    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);
            });
          }
        }
      )
    }
  )
)

然后,它调用回调

代码语言:javascript
复制
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在config中设置正确,并与添加到facebook开发人员控制台的url匹配。我看不出有什么问题。

EN

回答 1

Stack Overflow用户

发布于 2018-08-30 21:16:50

因此,经过多次试错和谷歌搜索,我发现Facebook只允许来自HTTPS的请求。即使我的Heroku域是HTTPS,它也没有ssl证书。我升级到一个业余爱好dyno,并在Heroku上的设置中应用了ssl证书,现在它可以工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52086931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档