Php OAUTH:FacebookAPI抛出错误,因为重定向url参数错误

Php OAUTH:FacebookAPI抛出错误,因为重定向url参数错误,php,facebook-graph-api,oauth-2.0,Php,Facebook Graph Api,Oauth 2.0,我在我的网站上使用FB登录,并且在两年多的时间里,集成工作是无缝的 然而,几天来,我偶尔在日志中看到这样的错误: 无法加载URL:此URL的域未包含在应用程序的 域名。要加载此URL,请添加所有域和子域 将应用程序的名称添加到应用程序设置中的“应用程序域”字段 调用的URL如下所示: https://www.mydomain/de/oauth2/facebook?code=abcdefgxyz&deferred_redirect_uri&state=12345 我不知道参数de

我在我的网站上使用FB登录,并且在两年多的时间里,集成工作是无缝的

然而,几天来,我偶尔在日志中看到这样的错误:

无法加载URL:此URL的域未包含在应用程序的 域名。要加载此URL,请添加所有域和子域 将应用程序的名称添加到应用程序设置中的“应用程序域”字段

调用的URL如下所示:

https://www.mydomain/de/oauth2/facebook?code=abcdefgxyz&deferred_redirect_uri&state=12345
我不知道参数
deferred\u redirect\u uri是什么(它不是一个有效的标准参数),也不知道它来自哪里,但我想这就是登录失败的原因

重要的是要注意,FB登录在99.99%的情况下仍然工作得很好,因此所有正确的URL都存在于Facebook开发者后端的应用程序设置中。设置绝对有效

所以我想知道这个罕见的错误是从哪里来的,如果这是某种黑客企图


如果您有任何见解,我们将不胜感激。

您是对的,我们也遇到了同样的问题,因为当URL包含
延迟重定向\u uri
时,登录失败并返回该错误

我们发现正在工作的修复有点棘手,不应该将其用作“最终”解决方案:在
Helpers/facebookrirectloginhelper.php
facebookrirectloginhelper
类中,有一个
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 support上也出现了一个bug,但没有关于该错误的其他信息。