0

我对drupal很陌生,所以如果我没有使用正确的术语,请多多包涵。我试图让一个愚蠢的基本应用程序访问一个drupal url——这个应用程序不能做任何复杂的身份验证。

否则,这个 drupal 系统需要身份验证,并且所有其他菜单挂钩都需要使用'access arguments' => array('access content')

甚至在寻找使用 drupal 之类的简单身份验证方法的解决方案之前,我已经尝试使用 drupal文件http://user:password@server.com/awesome/member/12345中的以下代码块提供匿名访问.module

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);
    }
}

使用经过身份验证的浏览器,这可以按预期工作。从没有身份验证 cookie 的浏览器中,我可以查看 HTML,但结果不存在,这就像该page callback功能不会为匿名用户运行,但delivery callback可以。

我如何为匿名用户完成这项工作?

4

1 回答 1

1

您正在使用access arguments默认user_access功能进行权限验证。这基本上会调用user_access(true)which 将返回

  • true对于经过身份验证的用户(您可能正在使用管理员帐户(uid = 1)进行测试)绕过验证检查。管理员拥有完全权限。
  • false对于匿名用户,因为传递给 的第一个参数的字符串值user_access true不作为权限设置存在。

您应该使用任一使用

  • 进行权限验证的自定义YOURMODULE_access钩子
  • 为您的模块声明自定义权限(YOURMODULE_permission钩子)
  • 不要使用权限验证,使用'access callback' => truewhich 可以访问匿名和经过身份验证的用户
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;
}
于 2013-11-10T12:55:15.360 回答