$ this-> Auth-> login()创建返回1行的正确查询,但IF检查失败(服务器特定问题)

Dav*_*ave 2 authentication cakephp cakephp-2.2

我们有一个网站,我们正在转移到一个新的服务器.在旧服务器上一切正常.它只是一个网站的开始,所以它非常简单.

迁移到我们的新服务器时,尝试登录不再有效.但是 - 根据debugKit,生成的查询由$this->Auth->login():

SELECT `User`.`id`, `User`.`name`, `User`.`email`, `User`.`username`, `User`.`password`, `User`.`role`, `User`.`created`, `User`.`modified` 
FROM `shopping_main`.`users` AS `User` 
WHERE `User`.`username` = 'another' 
AND `User`.`password` = '3813dd3a5eeb39c857d56f9ae58ec7f8237e5eb3' 
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

IS返回1行 - 但是这个if块失败了:

if ($this->Auth->login()) {
    $this->Session->setFlash(__('You are now logged in.'));
} else {
    $this->Session->setFlash(__('Invalid username or password, try again'));
}
Run Code Online (Sandbox Code Playgroud)

PDO安装在两个(相同版本)上 - 不确定是否重要,但我们之前遇到过奇怪的问题.

在全新安装CakePHP 2.2稳定版时,一切都亮起绿色(数据库连接,modrewrite等等)

我原本以为我们的数据或代码等等有问题,但是 - 它是相同的数据,相同的代码,并且通过它返回1行的事实得到验证.

下面是我$components在AppController中最新的数组:

public $components = array(
    'DebugKit.Toolbar',
    'Session',
    'Cookie',
    'Auth' => array(
        'loginRedirect' => array('controller' => 'dashboard', 'action' => 'index', 'admin'=>true),
        'logoutRedirect' => array('controller' => 'users', 'action' => 'login', 'admin'=>true)
    )
);
Run Code Online (Sandbox Code Playgroud)

更新:

根据我们的服务器人员,我们遇到问题的服务器是PECL唯一安装的服务器 - 当他删除它时,登录工作正常.(我们在服务器上需要它用于其他事情 - 为什么/什么会导致我们的登录无法运行?)

Dav*_*ave 5

通过原始海报回答(我):

根据我们的服务器人员说,"有两种方法可以加载PDO.第一种方法是使用easyapache安装PDO php扩展.第二种方法是通过PECL安装PDO.看来有问题的模块是不同的."

显然,这台服务器上有PECL而不是普通的easyapache PDO.当他删除它,并使用easyapache PDO重新启动/重置它时,一切都很好.

所以 - 像CakePHP这样的声音需要"正常"的PDO.

谜团已揭开.


如果您有PECL,则可以使用此解决方法:

  1. 在Datasource文件夹中创建一个文件"HpMysql.php"并添加以下代码/类:https://github.com/lorenzo/HipHop/blob/master/Model/Datasource/Database/HpMysql.php

  2. 将您的database.php'数据源'更改为'HpMysql'