2012-05-01 13 views
1

ModX RevolutionでフロントエンドのAjax機能を実装する適切な方法は何ですか?私はコネクターとプロセッサーの考え方が好きですが、なんらかの理由でバックエンドでのみ使用されています - modConnectorResponseは、ユーザーがログインしているかどうかを確認し、そうでない場合は「アクセス拒否」を戻します。ModX RevolutionのフロントエンドAjax

リソースにスニペットを挿入し、リソースURLでスニペットを挿入するのは1回限りの解決策に見えますが、それは私には見えません。

フロントエンドにはどのように安全なコネクタのような機能がありますか?

答えて

2

したがって、boundaryfunctions saidとすることはできません。また、ModX開発者は、単一のスニペットを含むリソースの使用をお勧めします。しかし、開発者がConnectorのような機能を求めているにもかかわらず、ModXコア開発者に分割されたGallery extraの解決策があるかもしれません。私のため

if ($_REQUEST['action'] == 'web/phpthumb') { 
    $version = $modx->getVersionData(); 
    if (version_compare($version['full_version'],'2.1.1-pl') >= 0) { 
     if ($modx->user->hasSessionContext($modx->context->get('key'))) { 
      $_SERVER['HTTP_MODAUTH'] = $_SESSION["modx.{$modx->context->get('key')}.user.token"]; 
     } else { 
      $_SESSION["modx.{$modx->context->get('key')}.user.token"] = 0; 
      $_SERVER['HTTP_MODAUTH'] = 0; 
     } 
    } else { 
     $_SERVER['HTTP_MODAUTH'] = $modx->site_id; 
    } 
    $_REQUEST['HTTP_MODAUTH'] = $_SERVER['HTTP_MODAUTH']; 
} 

作品:connector.phpでは、handleRequest()呼び出しの前に、承認を偽装コードがあります。最初のif状態を自分の行動に置き換えるだけでいいです。

UPDATE:私は、コネクタのデフォルトのコンテキストは「mgr」で、あなたは「mgrへのアクセスを設定しない限り、匿名ユーザーは(ポリシーチェックを通過しないので、あなたが、あなたのAJAXリクエストで&ctx=webパラメータを渡す必要があることを言及するのを忘れてしまいました"匿名ユーザーのためのコンテキスト)。

また、私がここで投稿したギャラリーのコードは、匿名のフロントエンドユーザーでは動作しません(バックエンドにログインしているときのみ動作します)。私は次でそれを置き換える:

if (in_array($_REQUEST['action'], array('loadMap', 'loadMarkers'))){ 
    $_SESSION["modx.{$modx->context->get('key')}.user.token"] = 1; 
    $_SERVER['HTTP_MODAUTH'] = $_REQUEST['HTTP_MODAUTH'] = 1; 
} 

このコードは、100%安全であるならば、私は知らないが、匿名ユーザーはそれを呼び出したときに、彼はマネージャーにログインしていないと思われる、と管理者があるときログインしてバックエンドからアクションを呼び出すと、彼は強制的にログオフされません。そして、それは私のための十分なセキュリティのように見えます。

このソリューションはまだ移植可能です(つまり、配布可能なExtraに組み込むことができます)が、深刻なプロジェクトではセキュリティをより真剣に検討する必要があります。

+0

問題のための非常に素晴らしい解決策、確かに! – bfncs

+0

更新され、いくつかの詳細がポップアップしました。 – Hnatt

1

私が知る限り、現時点ではこれはmodXでは不可能です。それはすでにdiscussed on the modx forumsfiled as a bug hereでしたが、誰かがそれに取り組んでいるようには見えません。

2つ目のリンクにも2つの回避策があります。個人的には、リソースツリーをきれいに保つためにコネクタ機能をassetsフォルダに置くことをお勧めします。

+0

リンクありがとうございました。検索中にも見つけました。私にとっては、 "ヘルパー"リソースを持つことも間違っています。私は見つけた回避策を投稿します。 – Hnatt

関連する問題