2012-08-07 47 views
1

我有一個Drupal站點和一個Zend應用程序。最主要的是Drupal站點,用戶存儲的地方都是&。使用Zend Auth和外部認證機制

我希望我的用戶在登錄Drupal時自動登錄到Zend應用程序。問題在於Drupal將會話cookie更改爲SESS*,其中*是一些隨機的(編輯:不是隨機的,但是基於協議和域)字符串。

有什麼辦法可以告訴Zend使用這個cookie作爲會話標識符並自動登錄用戶嗎?

+0

執行Drupal站點和Zend的應用程序共享相同的URL(包括子域名和端口)? – Florent 2012-08-07 14:42:57

+0

相同的端口是,相同的域名是,不同的子域名。該Cookie雖然設置在整個域中,所以可以從兩個站點訪問。 – 2012-08-07 14:43:55

+0

您可以編寫自己的身份驗證適配器(擴展'Zend_Auth_Adapter_Abstract')。閱讀cookie並處理認證。 – Florent 2012-08-07 14:46:06

回答

1

你必須寫自己的驗證適配器:

class YourApp_Auth_Adapter_DrupalBridge implements Zend_Auth_Adapter_Interface 
{ 
    /** 
    * @return Zend_Auth_Result 
    */ 
    public function authenticate() 
    { 
     // Check if the Drupal session is set by reading the cookie. 
     // ... 

     // Read the current user's login into $username. 
     // ... 

     // Create the authentication result object. 

     // Failure 
     if (null === $username) { 
      return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND, null); 
     } 

     // Success 
     return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $username); 
    } 
} 

然後處理您的驗證:

$adapter = new YourApp_Auth_Adapter_DrupalBridge(); 
$result = Zend_Auth::getInstance()->authenticate($adapter); 

if ($result->isValid()) { 
    // User is logged in 
}