如何在CakePHP 2.4中为AuthComponent设置数据库?

如何在CakePHP 2.4中为AuthComponent设置数据库?,php,mysql,database,cakephp,Php,Mysql,Database,Cakephp,我目前正在使用CakePHP(版本2.4)编写一个数据库访问应用程序。出于安全原因,我只有权读取数据库(“数据数据库”)。因此,我别无选择,只能使用另一个数据库(“应用程序数据库”)作为登录系统和其他一些应用程序数据 这是一个数据库访问应用程序,我80%以上的代码与数据数据库相关,因此我希望保持默认数据库与数据数据库的连接。对于我自己编写的模型,我知道我可以将数据库设置为由以下人员使用: public $useDbConnect = $applicationDatabase; $loginDa

我目前正在使用CakePHP(版本2.4)编写一个数据库访问应用程序。出于安全原因,我只有权读取数据库(“数据数据库”)。因此,我别无选择,只能使用另一个数据库(“应用程序数据库”)作为登录系统和其他一些应用程序数据

这是一个数据库访问应用程序,我80%以上的代码与数据数据库相关,因此我希望保持默认数据库与数据数据库的连接。对于我自己编写的模型,我知道我可以将数据库设置为由以下人员使用:

public $useDbConnect = $applicationDatabase;
$loginDatabase是我的应用程序数据库的数据库配置。它已添加到配置中

问题是,我在登录系统中使用了Cakephp的authComponent,这个组件的默认设置是使用默认的数据库连接。所以当我打电话的时候

$this->Auth->loggedIn(); //to check if the user have logged in or not
在任何控制器中,它都会给出一个错误代码,说明:

Error: Call to a member function loggedIn() on a non-object 
我在用户控制器中调用AuthComponent时发现了实际问题:

$this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
这是保存前的哈希密码行(也用于cakephp官方网站的官方指南),它给出了以下错误:

缺少数据库连接

错误:使用“Mysql”的数据库连接丢失或无法连接。
数据库服务器返回此错误:SQLSTATE[HY000][2002]无法建立连接,因为目标计算机主动拒绝 它

注意:如果要自定义此错误消息,请创建app\View\Errors\missing\u connection.ctp


因此,回到问题:有没有办法更改用于AuthComponent的数据库设置?

首先,要解决
错误:对非对象调用成员函数loggedIn()
,需要添加
$components=array('Auth','Session')到您的AppController

要回答下一个问题,AuthComponent没有设置数据库配置来验证用户。它将使用“用户”模型使用的数据库表。 因此,将以下内容添加到User.php模型中:

public $useDbConfig = 'loginDatabase';
确保数据库中的
users
表中填充了用户名和密码。另外,如您的问题中所述,将loginDatabase配置正确添加到
config/database.php
文件中

public $loginDb = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'somehost',
    'login' => 'someusername',
    'password' => 'somepassword',
    'database' => 'login_database', //this database should have your users table
);

谢谢你的回答,这正好说明了问题所在。我添加了$components=array('Auth','Session');在我的AppController中,它在每个控制器中都使用,但事实证明,我的队友在迁移到其本地服务器时意外删除了它。对于数据库问题,情况类似。我的队友向数据库添加了一个直接sql调用,并在该函数中手动设置数据库配置。这就是为什么添加public$useDbConfig='loginDatabase';没用。