2012-08-07 3 views
1

J'ai un site Drupal et une application Zend. La principale chose est le site Drupal, où les utilisateurs sont stockés & tout.Utilisation de Zend Auth avec un mécanisme d'authentification externe

Je souhaite que mes utilisateurs soient automatiquement connectés à l'application Zend lorsqu'ils se connectent sur Drupal. Le problème est que Drupal change le cookie de session à SESS** est une chaîne aléatoire (EDIT: non aléatoire, mais basée sur le protocole et le domaine).

Est-ce que je peux dire à Zend comment utiliser ce cookie comme identifiant de session et connecter automatiquement l'utilisateur?

+0

Faites le site Drupal et la part de l'application Zend la même URL (y compris sous-domaine et le port)? – Florent

+0

Même port oui, même domaine oui, sous-domaine différent tho. Le cookie est défini sur l'intégralité du domaine, il est donc accessible depuis les deux sites. –

+0

Vous pouvez écrire votre propre adaptateur d'authentification (extension 'Zend_Auth_Adapter_Abstract'). Lisez le cookie et traitez l'authentification. – Florent

Répondre

1

Vous devez écrire votre propre adaptateur d'authentification:

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); 
    } 
} 

transformons votre authentification:

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

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