Facebook 使用 HybridAuth 登录显示错误您无法直接访问此页面

Posted

技术标签:

【中文标题】Facebook 使用 HybridAuth 登录显示错误您无法直接访问此页面【英文标题】:Facebook Login using HybridAuth showing error You cannot access this page directly 【发布时间】:2015-01-01 06:36:21 【问题描述】:

我正在尝试为我的网站编写一个插件,以使用 HybridAuth 与 facebook 连接 类。

我刚刚尝试了以下代码

function authenticatewith( $provider ) 
    ini_set('display_errors','on');

    //includes
    $config   = dirname(__FILE__) . '/hybridauth-2.1.2/hybridauth/config.php';
    require_once("hybridauth-2.1.2/hybridauth/Hybrid/Auth.php");

    $provider_name = $provider;

    //$config = $this->getconfig($id);
    try 
        // initialize Hybrid_Auth with a given file
        $hybridauth = new Hybrid_Auth($config);

        // try to authenticate with the selected provider
        $adapter = $hybridauth->authenticate($provider_name);

        // then grab the user profile 
        $user_profile = $adapter->getUserProfile();
    
    catch( Exception $e ) 
        echo "Error: please try again!";
        echo "Original error message: " . $e->getMessage();
    

    echo "User Details: ";
    var_dump($user_profile);

当我从插件类中调用这个函数时。在浏览器中显示以下错误:

您无法直接访问此页面。

...浏览器地址栏中的URL是这样的:

http://zyx.com/oinmonm/plugins/sociallogin/hybridauth-2.1.2/hybridauth/?hauth.start=Facebook&hauth.time=1415168326

在搜索 *** 后,我发现了一个描述类似问题的类似问题,但我无法弄清楚如何将那里的建议应用于我的代码修复问题:

You cannot access this page directly - HybridAuth Social Login

很可能问题出在不同的域名上,因为我的网站在两个不同的域上运行。

如何修复我的代码以防止出现此问题?

更多详情

我在 www.bca.com(example) 上有一个 facebook 链接,然后当您单击它时会转到一个 controller.php 文件,该文件将访问我正在编写的插件。通常,如果我在网站中保存一个文件夹,例如 www.bca.com 无法访问的插件文件夹,而是可以通过其他域名访问。

我想说的是会话在 bca.com 开始,但 Hybridauth 类保存在其他域中。我认为这就是错误来的原因。

我尝试调试,发现错误是从 Endpoint.php 文件中的以下行弹出

// Check if Hybrid_Auth session already exist
if (! $storage->config("CONFIG"))  
    header("HTTP/1.0 404 Not Found");
    die("You cannot access this page directly.");

我从过去 3 天开始一​​直在尝试解决此问题。但是我被困在这一点上,请有人帮助我。 提前致谢

【问题讨论】:

我也有同样的问题。但我知道是什么原因造成的。我开始使用 Zebra Session Class。所以基本上这个脚本甚至找不到会话。如果您的会话完成方式不同,我会考虑研究一件事。我自己只需要找到一种方法让这两者一起工作! 我之前遇到过这个错误,它是当混合身份验证库需要从会话中检索的信息不存在时。修复导致信息在会话存储中不可用的问题,您将克服此错误。 【参考方案1】:

在文件顶部添加@session_start(); 语句后尝试。

【讨论】:

【参考方案2】:

我有同样的问题。它与我们由session_set_save_handler() 设置的自定义会话处理程序有关。 Hybrid Auth 使用标准 PHP 会话,因此在重定向并打开新会话后,Hybrid Auth 开始使用标准 PHP 文件会话而不是您的自定义会话处理程序。这会导致我们会话中的配置数据丢失并收到此错误消息。

我通过在hybridauth/index.php(与config.phplive.php 位于同一目录中)顶部添加我们自己的自定义会话处理程序解决了这个问题。 这会强制 Hybrid Auth 使用您的自定义会话处理程序。

【讨论】:

【参考方案3】:

对于有同样问题的人有一个问题:调用API的文件在同一目录下吗?

只有当我将我的文件放在与 config.php 文件相同的文件夹中时,我才能工作。在那里试一试,告诉我它是否有效!

【讨论】:

以上是关于Facebook 使用 HybridAuth 登录显示错误您无法直接访问此页面的主要内容,如果未能解决你的问题,请参考以下文章

PHP HybridAuth 社交登录根本不起作用。重定向到 ?hauth.start=Facebook&hauth.time

HybridAuth:如何为现有用户请求额外权限?

HybridAuth Facebook 登录错误:“无效范围:offline_access、publish_stream、read_friendlists”

Hybridauth - PHP - Facebook 返回了无效的用户 ID

您无法直接访问此页面 - HybridAuth 社交登录

HybridAuth 身份验证 cookie