Drupal goto werkt niet met drush

Posted by: 
Dominique De Cooman

In drupal is het soms nodig om doorverwijzigingen aan te brengen met het gebruik van drupal_goto. Dit hebben wij in ons SSO scenario moeten doen. Wanneer er geen rollen waren toegewezen aan een gebruiker door een externe verificatie (shibboleth), verwezen we drupal door naar een aangepaste admin pagina (node pagina). We brachten een check in hook_init () aan om zo drupal door te verwijzen wanneer de criteria vervuld waren.

Dit werkt echter drush tegen, maar gelukkig is er hiervoor een oplossing!
Je kan vooreerst nagaan door wie php is opgeroepen door gebruik te maken van php_sapi_name().
Wanneer het je webserver is zal de ouput 'apache2handler' zijn. Wanneer het drush is zal de output daarentegen 'cli' zijn.
In onderstaand stukje wordt er nagegaan of drush effectief php aanwendt. Daarnaast kan je ook een controle terugvinden waarin er wordt bepaald welke pagina's er niet mogen worden doorverwezen. $path kan geklasseerd worden bij admin configuratie of hardcoded

<?php
$paths
[] = $redirect;
$result db_result(db_query("SELECT uid FROM {extranet_role_assignment} WHERE uid = %d LIMIT 1"$user->uid));
if (!
$result && 
    !
user_access('administer era settings') && 
    !
in_array($_GET['q'], $paths) && 
    
php_sapi_name() != 'cli') {    
  
drupal_goto($redirect);
}
?>

Reactie toevoegen