![](/img/trans.png)
[英]How can I adjust the display of a facebook login from my server facebook api when it is not using the OAuth Dialog directly?
[英]How can I stop the momentary redirect with the #_=_ on the url when using Facebook Oauth?
我正在使用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 似乎認為它們是相同的 。 即使使用callbackURL
仍然可以重定向到無意義的URL。
具體來說,我想知道是否可以通過Passport來解決此問題,而不是通過用於修復網址的網頁端JavaScript來解決此問題。 后者似乎很hack。
這是Facebook方面的錯誤,而不是Passport的錯誤。 您無法在服務器端更改哈希,因此在JS頂部添加此代碼段即可達到目的(無需重定向):
if (window.location.hash === '_=_') {
window.location.hash = '';
}
根據Passport-Facebook的作者:
Facebook的OAuth 2.0實現存在一個錯誤,其中片段#_ = _附加到了回調URL。 這似乎會影響Firefox和Chrome,但不會影響Safari。 可以通過客戶端JavaScript刪除此片段,而@niftylettuce提供了建議的解決方法[有鏈接]。 鼓勵開發人員將其投訴轉到Facebook,以使他們為該問題實施適當的修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.