我使用Passport和Angular通过Facebook登录网站。代码如下:
facebookStrategy: function() {
if (!process.env.FACEBOOK_APP_ID) {
throw new Error("A Facebook App ID is required if you want to enable login via Facebook.");
}
if (!process.env.FACEBOOK_APP_SECRET) {
throw new Error("A Facebook App Secret is required if you want to enable login via Facebook.");
}
return new FacebookStrategy({
clientID: process.env.FACEBOOK_APP_ID,
clientSecret: process.env.FACEBOOK_APP_SECRET,
callbackURL: process.env.FACEBOOK_CALLBACK_URL || ("http://localhost:" + process.env.PORT + "/auth/facebook/callback")
}, function(accessToken, refreshToken, profile, done) {
var user;
user = module.exports.findOrCreateOauthUser(profile.provider, profile.id);
done(null, user);
});
}
(http://localhost
?废话,需要解决这个问题,这是我正在调整的一些示例代码)
好的,所以解决这个问题的方法是(玉):
script(type="text/javascript").
if (window.location.href.indexOf('#_=_') > 0) {
window.location = window.location.href.replace(/#.*/, '');
}
这看起来不错,但这是不必要的重定向。所以我的完美主义者想要摆脱它。文档似乎在这里需要redirect_uri
,但我有callbackURL
和Passport Facebook lib seems to think they're the same。即使使用callbackURL
,仍然会重定向到无意义的URL。
具体来说,我想知道是否可以通过Passport修复此问题,而不是修复网址的页面javascript。后者看起来很丑陋。
答案 0 :(得分:1)
这是Facebook方面的一个错误,而不是Passport的错误。你不能改变哈希服务器端,所以在你的JS顶部添加这个代码段就可以了(不需要重定向):
if (window.location.hash === '_=_') {
window.location.hash = '';
}
根据Passport-Facebook的作者:
Facebook的OAuth 2.0实现有一个错误,其中包含片段 #_ = _附加到回调URL。这似乎会影响Firefox和Chrome,但不会影响Safari。这个片段可以通过删除 客户端JavaScript和@niftylettuce提供了建议 解决方法[有一个链接]。鼓励开发人员将他们的投诉指向 Facebook努力让他们为此实施适当的解决方案 问题。