1

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

スニペットをリソースに挿入してリソース URL で呼び出すことは、1 回限りの解決策のように思えますが、私には適切ではありません。

では、フロントエンド用の安全なコネクタのような機能を取得するにはどうすればよいでしょうか?

4

3 に答える 3

2

したがって、boundaryfunctionsが言ったように、それは不可能であり、ModX 開発者は単一のスニペットが含まれるリソースを使用することを推奨しています。しかし、開発者の意向にもかかわらずコネクタのような機能を探している人には、推測で作成された解決策があるかもしれません.ModXコア開発者はギャラリーエクストラで分割されています. には、呼び出しの前に、認証を偽装するコードがあります。connector.phphandleRequest()

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

私のために働きます。if最初の条件を自分のアクションに置き換えるだけです。

更新: AJAX 要求でパラメーターを渡す必要があることを忘れていました。&ctx=webコネクタの既定のコンテキストは " mgr" であり、匿名ユーザーはポリシー チェックに合格しないためです (mgr匿名ユーザーに " " コンテキストへのアクセスを設定しない限り)。

また、ここに投稿したギャラリー エクストラのコードは、匿名のフロントエンド ユーザーでは機能しない (バックエンドにログインしている場合にのみ機能する) セッションのものをチェックしているように見えるので、次のように置き換えました。次:

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% 安全かどうかはわかりませんが、匿名ユーザーが呼び出した場合、そのユーザーは Manager にログインしていないように見えます。管理者がログインしてバックエンドからアクションを呼び出した場合、彼はログインしていません強制的にログオフしました。そして、それは私にとって十分なセキュリティのようです.

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

于 2012-05-03T15:34:53.873 に答える
1

私の知る限り、これは現時点で modX では不可能です。これはすでにmodx フォーラムで議論されており、ここにバグとして報告されていますが、誰もそれに取り組んでいるようには見えません。

2 番目のリンクにも 2 つの回避策があります。個人的には、コネクタ機能をアセット フォルダーに配置して、リソース ツリーをクリーンに保つことをお勧めします。

于 2012-05-03T09:46:30.830 に答える
0

ギャラリーで使用されるテクニックのより完全な説明がここにあります:

http://www.virtudraft.com/blog/ajaxs-connector-file-using-modxs-main-index.php.html

リソースを作成せずに、独自のプロセッサまたは組み込みの MODX プロセッサを実行するためのコネクタを作成できます。

于 2015-01-28T21:14:48.990 に答える