我已经尝试过在互联网上找到的所有内容都无济于事。
该模块提供由iframe处理的外部身份验证。身份验证完成后,会向drupal页面上的套接字发送一条消息,其成功或失败状态。 如果成功,模块需要再次与外部服务器通信以获取drupal上的用户ID以完成登录。
两件事: (1)drupal必须不知道外部凭据,并且 (2)外部验证器上的用户名/密码独立于drupal用户名/密码。
模块的名称是' 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)
很明显,我不是以drupal希望看到的方式构建网址,但我不知道该怎么做。
最初,我拥有yauisauth.module中的所有函数,但后来将回调函数和它调用的函数拆分为yauisauth.inc
在每次更改之间,我执行以下操作:
(在mysql中):
更新系统SET状态=' 0'姓名=' yauisauth&#39 ;; 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' 。警报通知我网址构造正确。
我有一个" die"在回调函数的开头,永远不会被执行。
如果我把网址放在地址栏中," die"执行语句以便找到路径。
仍在寻找建议。
答案 0 :(得分:2)
我刚刚看了你的代码 - 你在没有需要的时候添加了下划线,例如page_callback
应该是page callback
。请参阅:https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7。