我目前正在使用 CakePHP(版本 2.4)编写数据库访问应用程序。出于安全原因,我只被授予读取数据库(“数据数据库”)的权限。因此,我别无选择,只能使用另一个数据库(“应用程序数据库”)来存储我的登录系统和一些其他应用程序数据。
这是一个数据库访问应用程序,我超过 80% 的代码与数据数据库相关,因此我想保留与数据数据库的默认数据库连接。对于我自己编写的模型,我知道我可以设置要使用的数据库:
public $useDbConnect = $applicationDatabase;
$loginDatabase 是我的应用程序数据库的数据库配置。它已经添加到配置中。
问题是,我的登录系统使用的是 Cakephp 的 authComponent,而该组件的默认设置是使用默认的数据库连接。所以,当我打电话时
$this->Auth->loggedIn(); //to check if the user have logged in or not
在任何 Controller 中,它都会给出一个错误代码:
Error: Call to a member function loggedIn() on a non-object
当我在用户 Controller 中调用 AuthComponent 时,我发现了实际问题:
$this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
这是保存前哈希密码的行(也在cakephp官方网站的官方指南中使用。)它给出了以下错误:
Missing Database Connection
Error: A Database connection using "Mysql" was missing or unable to connect.
The database server returned this error: SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.Notice: If you want to customize this error message, create app\View\Errors\missing_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
);
关于php - 如何在 CakePHP 2.4 中设置 AuthComponent 的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22341302/