Authentication Drupal7-如何允许应用程序访问特定的DrupalURL(从菜单挂钩),可以使用基于超级基本url的身份验证,也可以匿名访问

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文件中使用

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

否则,此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;
}