代码之家  ›  专栏  ›  技术社区  ›  Prashant

Facebook身份验证:无法加载URL:此URL的域未包含在应用程序的域中

  •  4
  • Prashant  · 技术社区  · 8 年前

    我知道之前在这个链接中有人问过这个问题 Facebook OAuth "The domain of this URL isn't included in the app's domain" ,但解决方案对我不起作用。

    其显示错误如下: enter image description here

    我还将我的域包含在facebook api的应用程序域中, 我传递的重定向url格式如下所示: https://example.com/clients/authorization/facebook/a1njk2nkll55343nlk4/page

    此处,facebook/后面的随机字符是动态客户端的id。

    此外,我在登录facebook时也遇到了同样的问题。

    非常感谢。

    3 回复  |  直到 8 年前
        1
  •  4
  •   KCP    8 年前

    这可能是由于Facebook API的安全更新导致的问题。

    这是来自Facebook开发者仪表板!

    “3月份,我们将对您的应用程序设置进行安全更新,这将使来自未在有效OAuth重定向URI字段中列出的URI的调用无效”

    因此,在有效的OAuth重定向URI字段中添加站点的回调url

    您需要在Facebook登录中正确添加oAuth重定向URI->设置:有效的OAuth重定向URI 在有效的OAuth重定向uri中,可以使用以下格式包含uri: https://example.com/clients/authorization/facebook

    身份验证时的重定向uri可以如下所示: https://example.com/clients/authorization/facebook&a1njk2nkll55343nlk4/page

    此处“&”分离所需的其他参数。

    同样的情况也适用于facebook登录。将完整登录重定向uri添加到有效的OAuth重定向uri。这样地:

    https://example.com/login/facebook/callback

    希望这有帮助。

    谢谢

        2
  •  3
  •   JorgeO    8 年前

    当前行为不支持动态URL重定向。

    这是由于2017年12月宣布对重定向URI的处理进行了更改,并于本月生效,为了使用OAuth重定向,需要启用严格模式:

    https://developers.facebook.com/blog/post/2017/12/18/strict-uri-matching/

    确保在以下位置设置应用程序域:

    https://developers.facebook.com/apps/[your-app-ip]/settings/basic/

    还有所有回调URL,包括 https:// 请参见:

    https://developers.facebook.com/apps/[your-app-ip]/fb-login/settings/

    • 如果您使用的是PHP SDK,请确保安装了最新版本(v5.6.2)。
        3
  •  0
  •   celsyum    8 年前

    我对此有意见。注意到,在移动到https://it之后,它仍然重定向到http:// 在长时间查看fb sdk后,发现他们在检测您的站点是否安全时遇到了问题。

    所以,存档

    facebookd-v5*-sdk/Url/FacebookUrlDetectionHandler。php 更新两个函数。更新版本:

    protected function protocolWithActiveSsl($protocol)
    {
        $protocol = strtolower((string)$protocol);
    
        return in_array($protocol, ['on', '1', 'https', 'ssl', 'https, https'], true);
    }
    

    protected function getHostName()
    {
        ...
    
        // Don't append port number if a normal port.
        if (($scheme == 'http' && $port == '80') || ($scheme == 'https' && $port == '443') || ($scheme == 'https' && $port == '80')) {
            $appendPort = '';
        }
    
        return $host . $appendPort;
    }
    
    推荐文章