我正在尝试为我的网站编写一个插件,使用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如下所示:
在搜索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天我一直试图解决这个问题。但是我被困在这一点上,有人帮助我。 提前致谢
答案 0 :(得分:0)
在文件顶部添加@session_start();
语句后尝试。
答案 1 :(得分:0)
我有同样的问题。它与我们的自定义会话处理程序有关,该处理程序由session_set_save_handler()
设置。
Hybrid Auth使用标准PHP会话,因此在重定向和打开新会话后,Hybrid Auth开始使用标准PHP文件会话而不是自定义会话处理程序。这会导致会话丢失配置数据并收到此错误消息。
我通过在hybridauth/index.php
(位于与config.php
和live.php
相同的目录中)添加我们自己的自定义会话处理程序来解决此问题。
这会强制Hybrid Auth使用您的自定义会话处理程序。
答案 2 :(得分:-1)
对于有同样问题的人有疑问:调用API的文件在同一个目录下吗?
当我将我的文件放在与config.php文件相同的文件夹时,我才会工作。试试吧,告诉我它是否有效!