Authentication Drupal7-如何允许应用程序访问特定的DrupalURL(从菜单挂钩),可以使用基于超级基本url的身份验证,也可以匿名访问
我对drupal很陌生,所以如果我没有使用正确的术语,请容忍我。 我试图让一个愚蠢的应用程序访问drupal url——这个应用程序不能进行任何复杂的身份验证 否则,此drupal系统需要身份验证,所有其他菜单挂钩使用Authentication Drupal7-如何允许应用程序访问特定的DrupalURL(从菜单挂钩),可以使用基于超级基本url的身份验证,也可以匿名访问,authentication,drupal,drupal-7,anonymous,Authentication,Drupal,Drupal 7,Anonymous,我对drupal很陌生,所以如果我没有使用正确的术语,请容忍我。 我试图让一个愚蠢的应用程序访问drupal url——这个应用程序不能进行任何复杂的身份验证 否则,此drupal系统需要身份验证,所有其他菜单挂钩使用'access arguments'=>array('access content') 甚至在寻找类似drupal的轻松身份验证方法的解决方案之前http://user:password@server.com/awesome/member/12345,我尝试在drupal文件中使用
'access arguments'=>array('access content')
甚至在寻找类似drupal的轻松身份验证方法的解决方案之前http://user:password@server.com/awesome/member/12345,我尝试在drupal文件中使用以下代码块提供匿名访问
function awesome_module_menu() {
$items['awesome/member/%'] = array(
'title' => 'Awesome member',
'type' => MENU_NORMAL_ITEM,
'page callback' => 'aw_memberdata_fetch',
'delivery callback' => 'aw_memberdata_deliver',
'access arguments' => TRUE // this supposedly should allow anonymous access - from the web
);
return $items;
}
我有两个函数,一个用于获取数据,一个用于显示数据:
function aw_memberdata_fetch(memberId)
{
//fetch array of objects from DB
...
return $items;
}
function aw_memberdata_deliver($items)
{
switch(arg(3)) //format, comes after items
{
case 'json':
drupal_json_output($items);
break;
default:
$output = makeHtml($items); //makes HTML
drupal_deliver_html_page($output);
}
}
对于经过身份验证的浏览器,它可以按预期工作。从没有auth cookie的浏览器中,我可以看到HTML,但结果不在那里,这就像页面回调
函数不为其他用户运行,但传递回调
会运行一样
如何为非用户执行此操作?您正在使用默认的user\u access
函数来验证权限。这将基本上调用user\u access(true)
,返回
true
用于经过身份验证的用户(您可能正在使用管理员帐户(uid=1)进行测试),该帐户绕过验证检查。管理员具有完全权限
false
用于匿名用户,因为传递给用户访问权限的第一个参数的字符串值不作为权限设置存在
你应该使用其中一种
- 自定义
YOURMODULE\u访问
钩子,用于进行权限验证
- 为您的模块声明自定义权限(
YOURMODULE\u权限
hook)
- 不要通过使用
'access callback'=>true
来使用权限验证,这将为匿名和经过身份验证的用户提供访问权限
在hook_菜单中,我会添加:'page arguments'=>array(2),
function awesome_module_menu() {
$items['awesome/member/%'] = array(
'title' => 'Awesome member',
'type' => MENU_NORMAL_ITEM,
'page callback' => 'aw_memberdata_fetch',
'delivery callback' => 'aw_memberdata_deliver',
'access callback' => true,
);
return $items;
}