Magento link 到管理区域 - 编辑客户资料

Magento link to admin area - edit customer profile

在 Magento 中,当尝试从前端生成 link 来编辑客户时,我生成的 link 总是将我重定向回管理区域的仪表板,即使它看起来正确。

我已经在 Magento 的多个版本(以及社区版和企业版)上尝试过,结果相同。

$adminUrl = Mage::helper('adminhtml')->getUrl('adminhtml/customer/edit/index',array('id'=>7));
$adminUrl2 = Mage::helper("adminhtml")->getUrl("adminhtml/customer/edit/id/".'7'."/");           

这会产生一个 url,例如:/admin/customer/edit/id/7/key/f126e6cd7af2eb8cd068ff80fb512d4a/

这似乎是正确的,但当它被点击时,它会让我回到管理区域的仪表板。

但是,以下代码有效并且不会将我重定向到仪表板:

$adminUrl = Mage::helper('adminhtml')->getUrl('adminhtml/catalog_product/edit', array('id' => 157990));  

如果我手动复制 url 减去密钥 ,并将密钥替换为通过管理区域导航生成的密钥(即通过复制我浏览器导航栏中的工作键),它有效 - 所以我认为它必须以某种方式与此相关。

当您从前端生成管理员 URL 时,Magento 使用来自前端会话的表单密钥。然后,当您单击 link 时,Magento 会重新生成 admin URL 密钥以与 link 中的密钥进行比较,只是这一次,它使用 adminhtml 表单密钥。由于表单键不匹配,散列的 URL 键也不匹配,您的 link 将不起作用。 Magento 此时的行为是将您踢回管理仪表板(或管理员登录页面)。

任何继承自 Mage_Adminhtml_Controller_Action 的控制器都可以通过将某些操作添加到 $_publicActions 数组来允许某些操作不需要管理员 URL 密钥。

例如添加到Mage_Adminhtml_CustomerController

public $_publicActions = array('edit');