Kohana 3.2在多个数据库上使用Auth Module

时间:2012-04-05 12:46:53

标签: kohana authentication

我使用模块身份验证与ORM驱动程序和本机会话。

数据库配置'默认'和' customer_1'存在于application / config / database.php。

在登录之前,我使用以下命令更改默认数据库配置

Kohana::$config->load('database')->default = Kohana::$config->load('database')->get('customer_1');

这在Module Auth登录之前有效!

设置默认数据库配置后:

if (Auth::instance()->login($_POST['username'], $_POST['password']) === TRUE) { Request::current()->redirect(); }

这会导致以下错误:

Table 'default_database.users' doesn't exist [ SHOW FULL COLUMNS FROM `users` ]

由于某种原因,它使用初始默认数据库配置。

我的问题:如何为Module Auth设置默认数据库?

2 个答案:

答案 0 :(得分:1)

让我们稍微了解一下。

您实际上正在使用ORM / Auth,而不仅仅是Auth。 ORM / Auth中的ORM配置为使用默认数据库(如果未指定)。它允许您通过重载ORM.php文件中的$ _db_group来覆盖此选项。

让我们使用Kohana的级联文件系统来覆盖它。创建一个新文件:classes / auth.php。插入此代码:

<?php
class ORM extends Kohana_ORM {
    $_db_group = Kohana::$config->load('database')->get('customer_1');
}

全部设定。

答案 1 :(得分:1)

如果您希望Auth模块使用与其他模型不同的数据库,则应使用Gaurav Patel建议的$_db_group。但是,您应该只覆盖Auth ORM模型(user,role和user_token),而不是ORM类:

APPATH /类/模型/ user.php的:

class Model_User extends Model_Auth_User
{
    protected $_db_group = 'customer_1';
}

APPATH /类/模型/ role.php:

class Model_Role extends Model_Auth_Role
{
    protected $_db_group = 'customer_1';
}

APPATH /类/模型/用户/ token.php:

class Model_User_Token extends Model_Auth_User_Token
{
    protected $_db_group = 'customer_1';
}