Magento 2 Custom Admin Action เปลี่ยนเส้นทางไปยังแดชบอร์ด


18

ฉันกำลังเรียนหลักสูตรการพัฒนาพื้นฐาน Magento 2 และการออกกำลังกาย Admin Router / Controller ดูเหมือนจะล้าสมัย เราเตอร์ใช้งานได้ แต่คอนโทรลเลอร์ไม่ทำงานมันจะเปลี่ยนเส้นทางไปยังหน้าแรกของผู้ดูแลระบบเสมอ รหัสสำหรับแอปเราเตอร์/ รหัส / การฝึกอบรม / ทดสอบ / etc / adminhtml / route.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;
    }
}

เมื่อฉันไปที่ URL ของผู้ดูแลระบบของผู้ดูแลระบบ / ทดสอบ / การกระทำ / ดัชนีมันเพียงแค่เปลี่ยนเส้นทางและไม่มีอะไรเกิดขึ้น ถ้าฉันเพิ่มตัวสร้างและใช้ xdebug ก็แสดงให้เห็นว่ามันมาถึงตัวสร้างตัวควบคุม แต่มันไม่เคยส่วนรัน ฉันพลาดอะไรไป


ฉันหวังว่าฟังก์ชันโค้ดของคุณ _isAllowed return จริง ในตัวอย่างคำสั่ง "return" จะหายไป
KAndy

@ KAndy ใช่ขอบคุณ แก้ไขคำถามของฉันเพื่อแสดงว่า
Kevin Chavez

คำตอบ:


22

สิ่งนี้เกิดขึ้นเนื่องจาก 'รหัสลับ' หายไปเมื่อคุณพิมพ์ URL ด้วยตนเอง Stores => Configuration => Advanced => Admin => Security => Add Secret Key to URLsคุณลักษณะที่สำคัญความลับถูกเปิดใช้งานโดยค่าเริ่มต้นและสามารถปิดการใช้งานที่นี่: จากนั้นคุณควรจะสามารถบรรลุการกระทำของคุณ


@Alex Paliarush, วิธีการทำให้งานนี้เมื่อเปิดใช้งานคีย์ความปลอดภัย?
Aswanth

@Aswanth เพียงแค่เพิ่มการกระทำของคุณไปที่เมนูและคลิกที่มัน ในกรณีนี้วีโอไอพีจะเพิ่มคีย์ความปลอดภัยที่เหมาะสมให้กับคำขอ
Alex Paliarush

@AlexPaliarush ขอบคุณมันใช้งานได้สำหรับฉัน .. และช่วยประหยัดเวลาของฉัน
ZOE RULE

นี่เป็นปัญหา แต่ทำไมหลักสูตรไม่พูดเกี่ยวกับสภาพนี้ในการฝึก ฉันเสียเวลาตรวจสอบสิ่งนี้ไปหลายชั่วโมง ... Grrrrrrr
Binod - GoFundMonica

คำตอบที่สมบูรณ์แบบ !!! +1 :) ทำวันของฉัน
SagarPPanchal

12

ในrouter.xmlไฟล์ ( companyName/customModule/etc/adminhtml/router.xml) สำหรับฉันวิธีแก้ไขคือให้ id เส้นทางและชื่อหน้ามีค่าเหมือนกัน ในกรณีของคุณสิ่งนี้จะเป็น:

<?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) วีโอไอพีจะตรวจสอบความลับForm Keysและถ้า / เมื่อมีคนพยายามเข้าถึงการกระทำและไม่ได้จัดหา FormKey (เช่น hotlinking url) และ / หรือระบุ FormKey ที่ไม่ถูกต้อง - Adminhtml AbstractAction (Magento \ Backend \ App \ AbstractAction) จะกำหนดเส้นทางหน้าเริ่มต้นของผู้ดูแลระบบ UIX ที่ผู้ใช้กำหนด (ซึ่งโดยปกติจะเป็นหน้าแดชบอร์ด)

[กลไกนี้ทำหน้าที่ "จุดตรวจสอบความปลอดภัย" เพื่อป้องกันไม่ให้ผู้ใช้เข้าถึงส่วนของแบ็กเอนด์ที่พวกเขาไม่มีสิทธิ์เข้าถึง]


เมื่อเข้าถึงตัวเลือกจากเมนู Admin UIX - Magento จะเพิ่ม FormKey ให้คุณโดยอัตโนมัติ


เพื่อป้องกันการตรวจสอบ FormKey คุณมีสองตัวเลือก:

(a) ปิดการตรวจสอบ FormKey

การนำทาง:ร้านค้า -> การตั้งค่า: การกำหนดค่า -> ขั้นสูง: ผู้ดูแลระบบ -> ความปลอดภัย -> ตั้งค่า "เพิ่มคีย์ลับไปยัง URL" ถึง "ไม่"

สิ่งสำคัญคือต้องจำไว้ว่าการทำเช่นนั้นจะเป็นการปิดการตรวจสอบรหัสลับและอาจทำให้แอปพลิเคชันของคุณมีช่องโหว่

วิธีการปิดการตรวจสอบแบบฟอร์มของคีย์

(b) ปิดการตรวจสอบ FormKey สำหรับคอนโทรลเลอร์ของคุณ

ระบุการกระทำที่คุณต้องการยกเว้นจากการตรวจสอบ FormKey ในแอตทริบิวต์ "$ _publicActions" ของ Admin Controller ของคุณ

ป้องกัน $ _publicActions = ['ENTER_NAME_OF_ACTION'];

ตัวอย่างรหัส:

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

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

}

1

ปัญหาของการเปลี่ยนเส้นทางสายงานการผลิตโดยใช้รหัสความปลอดภัยเปิดใช้งานคือการตั้งค่า URL การกระทำใน menu.xml ภายใต้ / etc / adminhtml /

<?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>

ค่าที่สำคัญคือพารามิเตอร์การดำเนินการในรายการเมนู ให้ความสนใจเพื่อตั้งชื่อของโมดูลที่ประกาศลงใน 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()) ?>" /> จะช่วย

แต่คุณสามารถเพิ่ม Brickpoing ให้กับผู้ขาย / magento / module-backend / App / AbstractAction.php

if (!$_isValidFormKey || !$_isValidSecretKey) {}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.