使用自定义 php 会话路径时,HybridAuth 未进行身份验证

Posted

技术标签:

【中文标题】使用自定义 php 会话路径时,HybridAuth 未进行身份验证【英文标题】:HybridAuth not authenticating when using custom php session path 【发布时间】:2014-08-25 10:41:59 【问题描述】:

我在使用 HybridAuth 插件时遇到问题。我已将插件作为弹出窗口包含在我的主页中。单击主页上的登录按钮时,插件将加载到颜色框中。

在我的服务器中,我无法使用默认的 php 会话保存路径,因此我已将其设置为用于保存会话的 php 临时路径,如下面在我的根文件夹的 index.php 中。

$dir = sys_get_temp_dir();
session_save_path($dir);

更新此代码后,插件正在验证客户成功选择的社交媒体并返回我的网站,但它没有通过以下条件,

$hybridauth->isConnectedWith( $_GET["connected_with"] ) // it is always return false

在第二种情况下,我也更新了插件文件夹 index.php 中的会话保存路径,但当时在登录弹出窗口中,它没有显示登录 UI,而是直接显示如下错误页面

"You cannot access this page directly."

任何帮助将不胜感激。提前致谢。

【问题讨论】:

我也遇到了同样的错误。任何人都可以为此提供快速解决方案吗? @user2916075:可能是它没有存储您尝试登录的用户会话。重定向到您的网站后,您是否检查过会话是否存在? Turn on debugging 让我们有机会了解 API 所说的问题所在。我敢打赌你会看到PHP session.name diff from default PHPSESSID. 这个错误信息是什么意思? 【参考方案1】:

通常:RTM and discover the use of isConnectedWith

isConnectedWith() 如果当前用户连接到给定的,则返回 true 或 false 提供者。 Hybrid_Auth::isConnectedWith() 使用 PHP 会话。要知道 更多请参考 HybridAuth Sessions 部分。

Hybrid_Auth::isConnectedWith(provider)

其中 provider 是测试服务的名称。例如:Hybrid_Auth::isConnectedWith('Twitter')

确保您的 $_GET 返回正确的服务名称。

如果您想要连接的提供商列表:Hybrid_Auth::getConnectedProviders()

如果你想检查会话的数据:Hybrid_Auth::getSessionData()

API !

【讨论】:

【参考方案2】:

hybridauth/index.php 的顶部添加您自己的自定义会话处理程序(与config.phplive.php 位于同一目录中)。 这会强制 Hybrid Auth 使用您的自定义会话处理程序。

【讨论】:

【参考方案3】:

问题是你的默认会话路径:

$dir = sys_get_temp_dir();
session_save_path($dir);

我会 print_r 会话来查看注册的内容。为什么默认会话路径有问题?我不会尝试改变它并确保它首先起作用。这正在改变 HybridAuth 的主要功能。

为什么不能使用默认的php session 保存路径?您在共享主机上吗?

--

如果您有 shell 访问权限,请确保 Web 服务器用户对目录具有写入权限;那应该解决这个问题。

【讨论】:

以上是关于使用自定义 php 会话路径时,HybridAuth 未进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

PHP 会话管理

在规则中使用 php 会话值进行自定义 jquery 验证

Symfony:自定义会话保存处理程序最大执行时间

PHP 中Session 反序列化机制的三种方法

如何在 PHP + MySQL 中正确实现自定义会话持久化器?

PHP Wordpress:在一个会话变量中返回所有自定义字段