簡體   English   中英

使用Facebook Oauth時,如何在URL上使用#_ = _停止瞬時重定向?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM