Я пробовал все, что нашел в Интернете, безрезультатно.drupal 7 страница определяется hook_menu не найден
Модуль обеспечивает внешнюю аутентификацию, обрабатываемую iframe. Когда аутентификация завершается, сообщение отправляется в сокет на странице drupal с успехом или неудачным статусом. В случае успеха модуль должен снова связаться с внешним сервером, чтобы получить идентификатор пользователя на drupal для завершения входа.
Две вещи: (1) друпали не должны иметь никаких знаний о внешних учетных данных и (2) имя пользователя/пароль на внешнем идентифицирующем не зависит от Друпало имени пользователя/пароля.
Название модуля - «yauisauth».
Учитывая, что у меня есть следующие в hook_menu:
function yauisauth_menu() {
$items['yauisauth/callback/%'] = array(
'title' => 'yauis login completion',
'description' => 'coordinates yauis login with drupal login',
'access callback' => user_is_anonymous,
'file' => 'yauisauth.inc',
'page callback' => 'yauisauth_callback',
'page arguments' => array(2),
'type' => MENU_CALLBACK,
);
$items['yauisauth/failed'] = array(
'title' => 'login failed',
'description' => 'login failed',
'access callback' => user_is_anonymous,
'file' => 'yauisauth.inc',
'page callback' => 'yauis_login_failed',
'type' => MENU_CALLBACK,
);
return $items;
}
обратного вызова вызывается из JavaScript:
return_to = 'yauisauth/callback/';
return_to += transid;
jQuery.post(return_to, null, null);
Я получаю ошибку является:
POST http://localhost/drupal7/yauisauth/callback/4ddcd4ab-5167-4aa5-bafa-ee46812237d8 404 (Not Found)
Очевидно, я не строю url таким образом, что drupal хочет его увидеть, но я не знаю, что делать.
Первоначально я имел все функции в yauisauth.module, но затем разделить функции обратного вызова, и те, что звонки в yauisauth.inc
Между каждым изменением, я следующее:
(в MySQL):
UPDATE system SET status = '0' WHERE name = 'yauisauth'; DELETE FROM cache_bootstrap WHERE cid = 'system_list';
затем в Баш:
drush -cc menu
drush -cc all
(Слепо следуя каждой инструкции можно найти в сети.)
Функция обратного вызова выглядит следующим образом:
function yauisauth_callback($transid) {
$attr = get_attributes($transid);
if (empty($attr)) {
return drupal_not_found();
}
... // calls to other functions local to the yauisauth.inc file
}
Может кто-нибудь сказать мне, почему мой вызов функции обратного вызова не работает и что я могу сделать, чтобы он работал?
Основываясь на советах, полученных в другом месте, я поменял свой drupal на корень документа виртуального хоста и поместил весь URL-адрес в вызов javascript - window.location.origin + '/ yauisauth/callback. Предупреждение сообщает мне, что URL-адрес сконструирован правильно.
У меня есть «смерть» в начале функции обратного вызова, которая никогда не выполняется.
Если я поместил URL-адрес в адресную строку, оператор «die» будет выполнен так, чтобы маршрут был найден.
Все еще ищет совета.
Почему вы выполняете эти команды MySQL? Вам нужно очистить кеш (меню) для записей 'hook_menu', которые будут обнаружены. Вы уверены, что вы не тот, кто возвращал страницу «drupal_not_found» в вашем обратном вызове? (то есть, что '$ attr' не пуст?) –
Команды mysql должны отменить регистрацию модуля после изменений. Я не возвращаю страницу drupal_not_found, я получаю сообщение не найденное в консоли. – Carilda
Вам не нужно перерегистрировать модуль. Просто очистите кеш меню от Drush ('drush cc menu') или посетив' admin/config/development/performance'. Вы возвращаете 'drupal_not_found', если' $ attr' пуст в коде, который вы вставили. Вы уверены, что это не то, что попадает? –