【问题标题】:How to set the database for AuthComponent in CakePHP 2.4?如何在 CakePHP 2.4 中为 AuthComponent 设置数据库?
【发布时间】:2014-03-12 03:15:43
【问题描述】:

我目前正在使用 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] No connection could be made because the target machine positively denied 它。

注意:如果要自定义此错误信息,请创建 app\View\Errors\missing_connection.ctp

那么,回到问题上来:有没有办法更改用于 AuthComponent 的数据库设置?

【问题讨论】:

    标签: php mysql database cakephp


    【解决方案1】:

    首先,要解析Error: Call to a member function loggedIn() on a non-object,您需要将$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';没用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2016-02-13
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多