Magento 2 사용자 지정 관리자 작업이 대시 보드로 리디렉션 됨


18

Magento 2 기초 개발 과정을 수강하고 Admin Router / Controller 연습이 오래되었습니다. 라우터는 작동하지만 컨트롤러는 작동하지 않으며 항상 관리자 홈페이지로 다시 라우팅됩니다. 라우터 앱 / 코드 / 훈련 / 테스트 /etc/adminhtml/routes.xml의 코드 :

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/framework/App/etc/routes.xsd">
<router id="admin">
    <route id="test" frontName="test">
        <module name="Training_Test" before="Magento_Backend" />
    </route>
</router>
</config>

관리자 컨트롤러 앱 / 코드 / 훈련 / 테스트 / 컨트롤러 / 관리자 / 액션 /Index.php 용 코드 :

<?php

namespace Training\Test\Controller\Adminhtml\Action;
class Index extends \Magento\Backend\App\Action
{

public function execute()
    {
    die("test reached controller");
    }
protected function _isAllowed() {
    return true;
    }
}

admin / test / action / index의 관리 URL로 이동하면 리디렉션되고 아무 일도 일어나지 않습니다. 생성자를 추가하고 xdebug를 사용하면 컨트롤러 생성자에 도달하지만 실행 부분을 수행하지는 않습니다. 내가 무엇을 놓치고 있습니까?


코드 함수 _isAllowed에서 true를 반환하기를 바랍니다. 예를 들어 "반환"명령은 부재입니다
KAndy

@KAndy 네, 그래도 감사합니다. 그것을 보여주기 위해 내 질문을 편집했습니다.
케빈 차베스

답변:


22

URL을 수동으로 입력하면 '비밀 키'가 없기 때문에 발생합니다. 비밀 키 기능은 기본적으로 활성화되어 있으며 여기서 비활성화 할 수 있습니다 Stores => Configuration => Advanced => Admin => Security => Add Secret Key to URLs. 그러면 행동에 도달 할 수 있어야합니다.


@Alex Paliarush, 보안 키가 활성화되었을 때 어떻게 작동합니까?
Aswanth

@Aswanth 메뉴에 작업을 추가하고 클릭하십시오. 이 경우 Magento는 요청에 적절한 보안 키를 추가합니다
Alex Paliarush

@AlexPaliarush 감사합니다 그것은 나를 위해 일하고 .. 그리고 시간을 절약
ZOE 규칙

이것이 문제 였지만 연습에서이 상태에 대해 코스가 왜 말하지 않습니까? 나는 Grrrrrrr ...이 확인 약간의 시간을 잃었다
GoFundMonica - Binod

완벽한 답변 !!! 1 : 내 하루했다
SagarPPanchal

12

에서 router.xml파일 ( companyName/customModule/etc/adminhtml/router.xml나를 위해) 솔루션은 경로 ID를 가지고 있었고 frontName는 같은 값을 가지고있다. 귀하의 경우 이것은 다음과 같습니다.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
    <router id="admin">
        <route id="asw_advanved" frontName="asw_advanved">
            <module name="Asw_Sample" before="Magento_Backend"/>
        </route>
    </router>
</config>

질문 본문에 설명 된대로 기본 컨트롤러가 작동하도록 변경 <route id="Bmanager" frontName="bmanager">했습니다 <route id="bmanager" frontName="bmanager">. 여전히 내 맞춤형 컨트롤러로는 운이 없습니다. 편집 : 실제로 내 사용자 지정 컨트롤러 중 하나에 오류가 발생하기 시작했습니다. 오류가없는 리디렉션보다 훨씬 낫습니다.
Adrian Moisa

4

해당 속성을 사용하는 것이 좋습니다.

/**
 * Array of actions which can be processed without secret key validation
 *
 * @var array
 */
protected $_publicActions = ['action_name'];

2

백엔드 (Adminhtml)에서 모듈 / 기능에 액세스하려고 할 때 Magento는 비밀이 있는지 확인하고 Form Keys누군가가 조치에 액세스하려고 시도하고 FormKey를 제공하지 않는 경우 (예 : URL 핫 링크) 및 / 또는 잘못된 FormKey를 제공합니다. Adminhtml AbstractAction (Magento \ Backend \ App \ AbstractAction)은 사용자 Admin UIX의 정의 된 시작 페이지 (일반적으로 대시 보드 페이지)를 라우팅합니다.

[이 메커니즘은 "보안 검사 점"을 제공하여 사용자가 액세스 권한이없는 백엔드의 일부에 액세스하지 못하게합니다.


관리 UIX 메뉴에서 옵션에 액세스하면 Magento가 자동으로 FormKey를 추가합니다.


FormKey 확인을 방지하기 위해 다음 두 가지 옵션이 있습니다.

(a) FormKey 유효성 검사 끄기

탐색 : 상점-> 설정 : 구성-> 고급 : 관리-> 보안-> "URL에 비밀 키 추가"를 "아니오"로 설정

그렇게하면 비밀 키 유효성 검사가 해제되므로 응용 프로그램이 취약해질 있음을 기억해야 합니다.

FormKey 유효성 검사를 해제하는 방법

(b) 컨트롤러의 FormKey 유효성 검사를 끕니다.

AdminKey의 "$ _publicActions"속성에 FormKey 검사에서 면제하려는 조치를 지정하십시오.

보호 된 $ _publicActions = [ 'ENTER_NAME_OF_ACTION'];

코드 예 :

class Index extends \Magento\Backend\App\Action
{
    protected $_publicActions = ['index'];

    public function execute()
    {
        echo "My Hello World! Controller";
    }

}

1

보안 키가 활성화 된 라우팅 리디렉션 문제는 / etc / adminhtml / 아래의 menu.xml에 설정된 동작 URL입니다.

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
    <menu>
        <add id="Mycompany_Mymodule::top_level" module="Mycompany_Mymodule" resource="Magento_Backend::content" sortOrder="9999" title="My Module" parent="Magento_Sales::sales"/>
        <add action="mycompany_mymodule/profile/index" id="Mycompany::mycompany_mymodule_profile" module="mycompany_Mymodule" parent="Mycompany_Mymodule::top_level" resource="Magento_Backend::content" sortOrder="9999" title="My Module"/>
    </menu>
</config>

중요한 값은 메뉴 항목의 action 매개 변수입니다. route.xml에 선언 된 모듈의 이름을 id 매개 변수에 설정하도록주의하십시오. 제 경우에는 : "mycompany_mymodule"

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route frontName="mymodule" id="mycompany_mymodule">
            <module before="Magento_Backend" name="Mycompany_Mymodule"/>
        </route>
    </router>
</config>

0

<input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" /> 도울 것이다

그러나 당신은 vendor / magento / module-backend / App / AbstractAction.php에 벽돌을 추가 할 수 있습니다

if (!$_isValidFormKey || !$_isValidSecretKey) {}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.