Cakephp $this->;认证->;login()创建正确的查询,返回1行,但在检查时失败(特定于服务器的问题)

Cakephp $this->;认证->;login()创建正确的查询,返回1行,但在检查时失败(特定于服务器的问题),cakephp,authentication,cakephp-2.2,Cakephp,Authentication,Cakephp 2.2,我们有一个网站,我们正在移动到一个新的服务器。在旧服务器上一切正常。这只是一个网站的开始,所以它是非常简单的 当移动到新服务器时,尝试登录不再有效。但是-根据debugKit,由$this->Auth->login()生成的查询: 正在返回1行-但如果此块失败: if ($this->Auth->login()) { $this->Session->setFlash(__('You are now logged in.')); } else { $this

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

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

正在返回1行-但如果此块失败:

if ($this->Auth->login()) {
    $this->Session->setFlash(__('You are now logged in.'));
} else {
    $this->Session->setFlash(__('Invalid username or password, try again'));
}
PDO安装在这两个版本上(同一版本)-不确定这是否重要,但在此之前我们有过一些奇怪的问题

在重新安装CakePHP 2.2 stable时,所有内容都会显示为绿色(数据库连接、modrewrite…等等)

我本以为我们的数据或代码有问题…等等,但是-它是相同的数据,相同的代码,这可以通过它返回1行的事实来验证

下面是我最近在AppController中使用的
$components
数组:

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)
    )
);

更新:


据我们的服务器人员说,我们遇到问题的服务器是唯一一个安装了PECL的服务器——当他删除它时,登录成功了。(我们需要它在服务器上做其他事情-为什么/什么原因会使我们的登录无法工作?

由原始海报(我)回答:

根据我们的服务器人员的说法,“有两种加载PDO的方法。第一种是使用easyapache安装PDO php扩展。第二种是通过PECL安装PDO。似乎所讨论的模块是不同的。”

显然,这台服务器上有PECL,而不是普通的easyapache PDO。当他将其移除,并用easyapache PDO重新启动/重置时,一切都很顺利

听起来CakePHP需要“正常”的PDO

谜团解开了


如果您使用的是PECL,则可以使用以下解决方法:

  • 在数据源文件夹中创建一个文件“HpMysql.php”,并添加以下代码/类:

  • 将database.php“datasource”更改为“HpMysql”


  • 试图清除蛋糕缓存?罗斯-是的,清除了所有蛋糕缓存。可能是您的会话没有写入。如果无法写入会话,
    AuthComponent::login()
    将失败,尽管数据库中存在用户。@jeremyharris:Sessions编写得很好(经过测试和验证)@Dave您是否在用户模型上使用任何可能修改结果的行为?另外,抛出
    debug($result)lib/Cake/Controller/Component/AuthComponent::identifite()
    中找到结果后立即执行code>statement,以查看通过身份验证得到的结果并让我们知道。哇,真奇怪!很高兴你弄明白了:)
    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)
        )
    );