Кажется, это ошибка модуля Shibboleth , поэтому логин 'event' действительно не вызывается (в терминах Drupal он не вызывает hook_user()
с $op = 'login'
).
Глядя на код Shibboleth , похоже, что вход в систему происходит в его реализации hook_init()
:
/**
* Create a new user based on informations from the Shibboleth handler if it's necessary or log in.
*/
function shib_auth_init() {
global $user;
$unameVar = variable_get('shib_auth_username_variable', 'REMOTE_USER');
$umailVar = variable_get('shib_auth_username_email', 'HTTP_SHIB_MAIL');
// If
// - The user isn't logged in
// - There is Shibboleth authentication in the background
// - The settings are fine and there has been a valid username setted up
// - The settings are fine and there has been a valid user email address setted up
if (!$user->uid && $_SERVER['HTTP_SHIB_IDENTITY_PROVIDER']) {
if ($_SERVER[$unameVar] && $_SERVER[$umailVar]) {
user_external_login_register($_SERVER[$unameVar], "shib_auth");
}
else {
drupal_set_message(t("Username or e-mail address is missing. Maybe the Shibboleth configuration is not perfect."),"error");
}
}
if ($user->uid && $_SERVER['HTTP_SHIB_IDENTITY_PROVIDER']) {
$account = user_save($user,array('mail' => $_SERVER[$umailVar]));
// Terminate if an error occured during user_save().
if (!$account) {
drupal_set_message(t("Error saving user account."), 'error');
return;
}
$user = $account;
}
} // function shib_auth_init()
Так что вам нужно исправить это и убедиться, чтоэто user_module_invoke()
называется.Стандартный способ сделать это - позвонить user_authenticate_finalize()
после успешного входа в систему (что, в свою очередь, вызовет user_module_invoke()
), так что вы добавите это после вызова user_external_login_register()
:
[...]
if ($_SERVER[$unameVar] && $_SERVER[$umailVar]) {
user_external_login_register($_SERVER[$unameVar], "shib_auth");
// Do we have a logged in user now?
if ($user->uid) {
// Yes, ensure watchdog logging and proper invocation of hook_user
// NOTE: We pass an empty array, as no form submit was involved here,
// but we could also pass an array with 'unameVar' and 'umailVar',
// as they would be the closest substitute.
user_authenticate_finalize(array());
}
}
[...]
ПРИМЕЧАНИЕ: Непроверенный код, остерегайтесь опечаток и других глупых упущений;)
Если вы в конечном итоге сделаете это, вы можете отправить его в виде патча дляотчет об ошибке, связанный выше.(только если это работает, очевидно;)