我尝试了所有在互联网上都找不到的东西。由hook_menu定义的drupal 7页未找到
模块提供由iframe处理的外部认证。身份验证完成后,会向drupal页面上的套接字发送消息,并显示成功或失败状态。 如果成功,模块需要再次与外部服务器通信以获取drupal上的用户名以完成登录。
两件事: (1)drupal必须不知道外部凭证,并且 (2)外部验证器上的用户名/密码与drupal用户名/密码无关。
该模块的名称是'yauisauth'。
鉴于此,我在hook_menu如下:
return_to = 'yauisauth/callback/';
return_to += transid;
jQuery.post(return_to, null, null);
我得到的错误是:
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调用
POST http://localhost/drupal7/yauisauth/callback/4ddcd4ab-5167-4aa5-bafa-ee46812237d8 404 (Not Found)
显然,我不是以drupal想要看到的方式构建url,但我不知道该怎么做。
本来,我曾在yauisauth.module所有功能,但再拆回调函数和调用到yauisauth.inc
每个变化之间的那些,我做了以下内容:
(在MySQL ):
UPDATE system SET status ='0'WHERE name ='yauisauth'; DELETE FROM cache_bootstrap WHERE cid ='system_list';
在bash则:
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正确构建。
我有一个“死”在回调函数的开始,永远不会被执行。
如果我把网址放在地址栏中,就会执行“die”语句,以便找到路由。
仍在寻找建议。
你为什么要执行这些MySQL命令?您只需清除要发现的“hook_menu”条目的(菜单)缓存。你是积极的,你不是在回调中返回'drupal_not_found'页面的人吗? (也就是说'$ attr'不是空的?) – 2014-09-03 19:15:33
mysql命令将在更改后取消注册模块。我没有返回drupal_not_found页面,我在控制台中找到未找到的消息。 – Carilda 2014-09-03 19:32:06
您不需要重新注册模块。只需从Drush('drush cc menu')清除菜单缓存或访问'admin/config/development/performance'即可。如果您粘贴的代码中的$ attr'为空,则返回'drupal_not_found'。你是积极的,这不是正在遭受打击? – 2014-09-03 19:43:27