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

次の 2 つの関数があります。1 つはデータを取得するためのもので、もう 1 つはデータを表示するためのものです。

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ません。関数が anon ユーザーに対して実行されないようですが、実行されますdelivery callback

anonユーザーがこれを機能させるにはどうすればよいですか?

4

1 に答える 1

1

権限検証access argumentsのデフォルト機能で使用しています。user_accessこれは基本的に、user_access(true)どちらが返されるかを呼び出します

  • true認証されたユーザー(おそらく管理者アカウント(uid = 1)でテストしている)の場合、検証チェックをバイパスします。管理者には完全な権限があります。
  • falseに渡される最初の引数の文字列値がuser_access true権限設定として存在しないため、匿名ユーザーの場合。

どちらかを使用する必要があります

  • YOURMODULE_accessパーミッション検証を行うカスタムフック
  • モジュールのカスタム権限を宣言する (YOURMODULE_permissionフック)
  • 'access callback' => true匿名および認証されたユーザーにアクセスを許可する使用によるアクセス許可の検証を使用しないでください
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 に答える