[英]Yii database connection issue
我需要的是基於Oracle DB用戶系統對用戶進行身份驗證:
我正在使用Yii框架。
我從protected/config/main.php
文件中刪除了db
組件。 根據拉里·烏爾曼(Larry Ulman)的博客文章,將authenticate
(位於protected/components/UserIdentity.php
)替換為以下一個
public function authenticate()
{
$dsn='oci:dbname=XE;charset=UTF8';
$connection=new CDbConnection($dsn,$this->username,$this->password);
$connection->active=true;
return $connection->getConnectionStatus();
}
嗯,它沒有建立任何連接。 我在使用oracle客戶端測試的服務器中的順便說一句。 一切正常。
我的開發環境在Windows Server 2003上運行Oracle DB和Apache 2.2.4 + PHP 5.4 Web服務器。
花了一些時間來了解您想要什么。 所以基本上就像:
db
組件,該組件在整個用戶會話中都使用相同的連接憑據 您創建自定義UserIdentity
是正確的。 它們用於進行身份驗證。 我不確定為什么您的代碼在那里失敗,但是您的方向正確。 也許getConnectionStatus()
不適用於Oracle。 您可以嘗試執行另一個簡單的SQL命令進行測試。
如果您已成功測試連接成功,則應將username
和password
存儲在用戶會話中,例如
Yii::app()->user->setState('__db_username',$this->username);
Yii::app()->user->setState('__db_password',$this->password);
現在,登錄后使db
組件可用有點棘手。 您可以采取不同的方法。 我將描述兩個:
class DynamicDbConnection extends CDbConnection
{
public function init()
{
$this->username = Yii::app()->user->getState('__db_username');
$this->password = Yii::app()->user->getState('__db_password');
if(!$this->username || !$this->password) {
throw new CException('No username/password available! User not logged in?');
}
parent::init();
}
}
現在,您當然可以在main.php
將此配置為db
組件, 而無需用戶名和密碼,當然:
'components' => array(
'db' => array(
'class' => 'DynamicDbConnection',
'connectionString' =>'oci:dbname=XE;charset=UTF8',
),
),
您可以從基本控制器的init()
方法添加db
組件:
class Controller extends CController
{
public function init()
{
$username = Yii::app()->user->getState('__db_username');
$password = Yii::app()->user->getState('__db_password');
if($username && $password) {
Yii::app()->setComponent('db', array(
'username' => $username,
'password' => $password,
));
}
parent::init();
}
為此,在main.php
,您仍然需要基本的db
組件配置。
兩種方法可能都需要稍作調整,因為我尚未對此進行測試。 但是您應該了解基本思想。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.