2012-04-05 5 views
0

私はORMドライバとネイティブセッションでModule Authを使用しています。Kohana 3.2複数のデータベースでの認証モジュールの使用

データベース設定 'default'と 'customer_1'は、application/config/database.phpにあります。ログインする前に

私はデフォルトのデータベースの設定を変更します。

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

これは、モジュールの認証ログインの前に作業を行います!デフォルトのデータベースの設定を設定した後

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のデフォルトデータベースを設定するにはどうすればよいですか?

答えて

1

これから少し説明しましょう。

実際にはAuthだけでなく、ORM/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'); 
} 

すべてのセット。

+0

ねえ、あなたの応答のGauravパテルに感謝します。 コードは次のようになります。認証::インスタンス()が呼び出されたときに class ORM extends Kohana_ORM { \t function __construct() { \t \t $this->_db_group = Kohana::$config->load('database')->get('customer_1'); \t } } しかし、これはエラーになります:

Class 'Auth' not found

+0

あなたのブートストラップで認証モジュールをロードしましたか? – gspatel

1

Authモジュールで他のモデルを使用する場合は、Gaurav Patelのように$_db_groupを使用する必要があります。しかし、あなただけの認証ORMモデル(ユーザー、役割と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'; 
} 
+0

これは完全に機能します!しかし、Auth :: instance() - > login()を呼び出す前に、$ _db_groupをどのように変更できますか? APPATH /クラス/ AUTH/ORM: 'クラスAuth_ORMが延びKohana_Auth_ORM { –

+0

は、私はこれをしようと試みてきたが、それはトリックを行うdoesntの、ORMクラスを拡張' $の_db_group'用セッターを追加して、ログイン – matino

+0

前にそれを呼び出します \tパブリック関数set_db_group($のdb_groupという) \t {\t \t $この - > _ db_groupという= $ db_groupという。 \t} } ' と'認証を呼び出す前に::インスタンス() - >ログイン() ': '認証::インスタンス() - > set_db_group( 'customer_2'); 'またそのないAuthのことモジュールを別のデータベースを使用して他のモデルを使用すると、アプリケーション全体が別のデータベースに変更されますが、Modulde Authはデフォルトに固執します。 –

関連する問題