2012-05-01 4 views
1

ModX Revolution에서 프런트 엔드 Ajax 기능을 구현하는 적절한 방법은 무엇입니까? 나는 커넥터와 프로세서에 대한 아이디어를 좋아하지만 어떤 이유로 백엔드 용으로 만 사용됩니다. modConnectorResponse은 사용자가 로그인되어 있는지 확인하고 그렇지 않은 경우 '액세스 거부'를 반환합니다.ModX 혁명의 프런트 엔드 Ajax

리소스에 스 니펫을 삽입하고 리소스 URL로 스 니펫을 삽입하는 것은 한 번 해결할 수 있지만 나에게 맞지 않습니다.

그럼 프런트 엔드에 대해 안전한 커넥터와 같은 기능을 어떻게 얻을 수 있습니까?

답변

2

따라서 boundaryfunctions said과 같이 가능하지 않으며 ModX 개발자는 단일 스 니펫이 포함 된 리소스 사용을 권장합니다. 그러나 개발자들의 의지에도 불구하고 커넥터와 같은 기능을 찾으려는 사람들에게는 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 : I 커넥터에 대한 기본 컨텍스트는 "mgr"이고 당신이 "mgr에 대한 액세스 권한을 설정하지 않으면 익명 사용자 (정책 검사를 통과하지 않기 때문에 당신이 당신의 AJAX 요청과 &ctx=web 매개 변수를 전달해야한다는 것을 언급하는 것을 잊었다 "익명 사용자를위한 컨텍스트).

또한 여기에 게시 된 Gallery의 코드는 익명의 프런트 엔드 사용자와 작동하지 않는 세션 항목을 확인하는 것 같습니다 (백엔드에 로그인 한 경우에만 작동합니다). 나는 그것을 대체 다음 : 관리자 인 경우

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 이었지만 아무도 그것에 대해 연구하고 있지는 않습니다.

두 번째 링크에는 두 가지 가능한 대안이 있습니다. 개인적으로 리소스 트리를 깨끗하게 유지하려면 자산 기능 폴더에 커넥터 기능을 추가하는 것이 좋습니다.

+0

링크를 제공해 주셔서 감사합니다. 나를 위해 "도우미"자원을 갖는 것도 잘못되었습니다. 내가 찾은 해결 방법을 게시 할 것입니다. – Hnatt

관련 문제