node.js - 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 应用程序,因此您可以了解我的意思。
请帮忙,谢谢!!
解决方案
我遇到过同样的问题。经过多次 Google 搜索后,我发现 Facebook 只允许来自 HTTPS 的请求。即使我的 Heroku 域是 HTTPS,它也没有 ssl 证书。我升级到一个爱好测功机并在 Heroku 的设置中应用了一个 ssl 证书,它现在可以工作了。
推荐阅读
- javascript - JS 在没有 JSX 按钮的情况下做出反应
- firebase - 函数/区域配置值在 Firebase 云函数中实际上做了什么?
- terraform - 向地形变量添加约束
- javascript - UnhandledPromiseRejectionWarning: SyntaxError: 无效的正则表达式: /\?(?
.*)/: 无效组 - hive - 数据插入问题
- r - R - 用其他列数据填充一列
- haskell - 在haskell中保证类型的值
- firebase - 如何将事务与 int 数据一起使用 - Firestore Flutter
- rest - GET 方法永远不会与基于安全 OAuth/OpenClient 的应用程序一起使用吗?
- r - 如何读取 .rdata 文件并从中写入 .csv 文件