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

时间:2014-11-05 06:24:15

标签: php facebook session-variables hybridauth

我正在尝试为我的网站编写一个插件,使用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

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

You cannot access this page directly - HybridAuth Social Login

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

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

更多详情

我在www.bca.com(示例)上有一个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天我一直试图解决这个问题。但是我被困在这一点上,有人帮助我。 提前致谢

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

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

当我将我的文件放在与config.php文件相同的文件夹时,我才会工作。试试吧,告诉我它是否有效!