【问题标题】:OAUTH: Facebook API throws error because of wrong redirect-url parameterOAUTH:Facebook API 因重定向 URL 参数错误而引发错误
【发布时间】:2020-12-24 23:00:27
【问题描述】:

我在我的网站上使用 FB 登录,并且集成无缝运行了两年多。

不过,几天来,我偶尔会在日志中看到此错误:

无法加载 URL:此 URL 的域未包含在应用的 域。为了能够加载此 URL,请添加所有域和子域 将您的应用添加到应用设置中的“应用域”字段。

调用的 URL 如下所示:

https://www.mydomain/de/oauth2/facebook?code=abcdefgxyz&deferred_redirect_uri&state=12345

我不知道参数deferred_redirect_uri是什么(它不是一个有效的标准参数)或者它来自哪里,但我猜这就是登录失败的原因。

值得注意的是,FB 登录在 99.99% 的情况下仍然可以正常工作,因此所有正确的 URL 都存在于 Facebook 开发人员后端的 APP 设置中。该设置绝对有效。

所以我想知道这个罕见的错误来自哪里,这是否是某种黑客攻击?

任何见解将不胜感激。

【问题讨论】:

    标签: php facebook-graph-api oauth-2.0


    【解决方案1】:

    您是对的,我们遇到了同样的问题,因为当 URL 包含 deferred_redirect_uri 时,登录失败并返回该错误。

    我们发现工作的修复有点棘手,它不应该用作“最终”解决方案:在 FacebookRedirectLoginHelper 类的 Helpers/FacebookRedirectLoginHelper.php 中,有一个调用静态的 getAccessToken 函数FacebookUrlManipulator 的函数 removeParamsFromUrl。 该函数基本上在获取 OAuth2 令牌之前删除了所有不需要的参数,因此在我们将奇怪的参数添加到该数组后,登录错误就消失了。

    public function getAccessToken($redirectUrl = null)
    {
        if (!$code = $this->getCode()) {
            return null;
        }
    
        $this->validateCsrf();
        $this->resetCsrf();
    
        $redirectUrl = $redirectUrl ?: $this->urlDetectionHandler->getCurrentUrl();
        // At minimum we need to remove the 'code', 'enforce_https' and 'state' params
        $redirectUrl = FacebookUrlManipulator::removeParamsFromUrl($redirectUrl, ['code', 'enforce_https', 'state', 'deferred_redirect_uri']);
    
        return $this->oAuth2Client->getAccessTokenFromCode($code, $redirectUrl);
    }
    

    【讨论】:

    • 哈哈哈,伟大的思想都一样:这正是我认为可以解决问题的方法,但我想,如果有人有比这更好的解决方案,我会看看。但问题依然存在:这个参数从何而来?
    • 这是一个非常好的问题,因为这个问题在周六早上突然出现在我们面前。 Facebook 支持上还打开了一个错误,但没有关于该错误的其他信息。 developers.facebook.com/support/bugs/1039393886517645
    猜你喜欢
    • 1970-01-01
    • 2022-08-11
    • 2018-01-01
    • 1970-01-01
    • 2018-04-02
    • 2012-03-04
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多