2014-09-03 2 views
1

Я пробовал все, что нашел в Интернете, безрезультатно.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» будет выполнен так, чтобы маршрут был найден.

Все еще ищет совета.

+0

Почему вы выполняете эти команды MySQL? Вам нужно очистить кеш (меню) для записей 'hook_menu', которые будут обнаружены. Вы уверены, что вы не тот, кто возвращал страницу «drupal_not_found» в вашем обратном вызове? (то есть, что '$ attr' не пуст?) –

+0

Команды mysql должны отменить регистрацию модуля после изменений. Я не возвращаю страницу drupal_not_found, я получаю сообщение не найденное в консоли. – Carilda

+0

Вам не нужно перерегистрировать модуль. Просто очистите кеш меню от Drush ('drush cc menu') или посетив' admin/config/development/performance'. Вы возвращаете 'drupal_not_found', если' $ attr' пуст в коде, который вы вставили. Вы уверены, что это не то, что попадает? –

ответ

2

Я просто посмотрел на ваш код - вы добавляете символы подчеркивания, когда они не нужны, например page_callback должно быть page callback. См.: https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7.

+0

Спасибо, Чарли - я исправил это, все еще неправильно получаю мою новую страницу. – Carilda

+0

Если вы можете опубликовать измененный код и убедиться, что попадание URL-адреса вручную в вашем браузере не исправить, я могу попытаться помочь. –

+0

Я сделал рекомендованные изменения выше. Когда я пытаюсь использовать url localhost/drupal7/yauisauth/callback, я получаю «Запрошенный URL /usr/share/drupal7/index.php не найден на этом сервере». Обратите внимание, что он не отказывается от моего маршрута, но вместо этого отказывается от index.php, используя адрес файловой системы для drupal 7 вместо веб-адреса (/ usr/share/drupal7 вместо localhost/drupal7). По-видимому, мне нужно сделать что-то другое для маршрутизации, но я не знаю, что. – Carilda

Смежные вопросы