Javascript 在使用Facebook Oauth时,如何使用url上的#=u停止瞬间重定向?
我正在使用Passport和Angular通过Facebook登录一个网站。代码如下所示:Javascript 在使用Facebook Oauth时,如何使用url上的#=u停止瞬间重定向?,javascript,node.js,facebook,passport.js,Javascript,Node.js,Facebook,Passport.js,我正在使用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.FACEBO
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
?废话,需要解决这个问题,这是我正在修改的一些示例代码)
好的,这个问题的解决方案是(jade):
这看起来不错,但这是一个不必要的重定向。所以我内心的完美主义者想要摆脱它。文档似乎说这里需要redirect\u uri
,但我有callbackURL
和Passport Facebook lib。即使使用callbackURL
,仍会重定向到无意义的URL
具体来说,我想知道是否有可能通过Passport而不是页面端javascript来修复url。后者似乎很粗糙 这是Facebook方面的错误,而不是Passport方面的错误。您无法更改哈希服务器端,因此将此代码段添加到JS顶部即可(无需重定向): 作者: Facebook的OAuth2.0实现有一个bug,其中 #_=\被附加到回调URL。这似乎会影响Firefox和Chrome,但不会影响Safari。这个片段可以通过 客户端JavaScript,@niftylettuce提供了一个 解决方法[有一个链接]。发展商可直接向 Facebook试图让他们对此进行适当的修复 问题
location.replace()比重新分配整个url更快,更改location.hash根本无法导航。您还可以使用history.pushState()更改整个url,而无需导航。抱歉,不清楚。我想在不使用页面端javascript的情况下解决这个问题。Facebook正在追加
\u=\ u
,因为重定向uri不存在。但它似乎在代码中。所以这可能是passport中的一个错误。你是对的。如果您不介意,我附加了一些文字解释。@jcollum没问题,谢谢!应该有助于那些在未来找到答案的人。
script(type="text/javascript").
if (window.location.href.indexOf('#_=_') > 0) {
window.location = window.location.href.replace(/#.*/, '');
}
if (window.location.hash === '_=_') {
window.location.hash = '';
}