【问题标题】:How can I stop the momentary redirect with the #_=_ on the url when using Facebook Oauth?使用 Facebook Oauth 时,如何使用 URL 上的 #_=_ 停止瞬时重定向?
【发布时间】:2015-01-09 06:00:37
【问题描述】:

我正在使用 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 而不是修复 url 的页面端 javascript 来解决这个问题。后者似乎很老套。

【问题讨论】:

  • location.replace() 比重新分配整个 url 更快,并且更改 location.hash 根本不会导航。您还可以使用 history.pushState() 更改整个 url 而无需导航。

标签: javascript node.js facebook passport.js


【解决方案1】:

这是 Facebook 的错误,而不是 Passport 的错误。你不能改变服务器端的哈希值,所以在你的 JS 顶部添加这个 sn-p 就可以了(不需要重定向):

if (window.location.hash === '_=_') {
  window.location.hash = '';
}

Passport-Facebook的作者:

Facebook 的 OAuth 2.0 实现有一个错误,其中片段 #_=_ 附加到回调 URL。这似乎会影响 Firefox 和 Chrome,但不会影响 Safari。可以通过以下方式删除此片段 客户端 JavaScript,@niftylettuce 提供了一个建议 解决方法[有一个链接]。鼓励开发者将他们的投诉直接提交给 Facebook 努力让他们为此实施适当的修复 问题。

【讨论】:

  • 抱歉,不清楚。我想在没有页面端 javascript 的情况下解决这个问题。 Facebook 正在附加 _=_,因为 redirect_uri 不存在。但它似乎在代码中。所以也许这是护照中的一个错误。
  • 你是对的。如果你不介意,我附上了一些解释它的文字。
  • @jcollum 没问题,谢谢!应该可以帮助那些将来找到这个答案的人。
猜你喜欢
  • 1970-01-01
  • 2020-01-21
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
相关资源
最近更新 更多