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.php
和live.php
位于同一目录中)顶部添加我们自己的自定义会话处理程序解决了这个问题。
这会强制 Hybrid Auth 使用您的自定义会话处理程序。
【讨论】:
【参考方案3】:对于有同样问题的人有一个问题:调用API的文件在同一目录下吗?
只有当我将我的文件放在与 config.php 文件相同的文件夹中时,我才能工作。在那里试一试,告诉我它是否有效!
【讨论】:
以上是关于Facebook 使用 HybridAuth 登录显示错误您无法直接访问此页面的主要内容,如果未能解决你的问题,请参考以下文章
PHP HybridAuth 社交登录根本不起作用。重定向到 ?hauth.start=Facebook&hauth.time
HybridAuth Facebook 登录错误:“无效范围:offline_access、publish_stream、read_friendlists”