1

我正在开发一个具有需要在 cron 中定期运行的功能的模块。实现的想法是创建一个第三方 cron 模块将要调用的控制器。我的问题是,为了调用该控制器,需要一个令牌。管理面板中的令牌是每个会话临时的。有没有办法为某个控制器获取静态令牌?或者有没有更好的方法来实现我想要的(通过api或其他东西)?

路线.yml:

admin_mymodule_myaction:
  path: /mymodule/myaction
  methods: [GET]
  defaults:
    _controller: 'PrestaShop\Module\MyModule\Controller\Admin\MyController::myAction'

MyController.php:

class MyController extends FrameworkBundleAdminController{
  public function myAction(){
    ...
  }
}

链接到控制器(令牌是临时的):

http://localhost/admin303/index.php/modules/mymodule/myaction?_token=uPmkkqeqBVfnjUGdLKs9_Ik585Q1GlsXWK-qiGfC3r0
4

1 回答 1

1

我找到了解决方案。我需要使用Front 控制器,而不是Admin 控制器。前端控制器不需要令牌,我可以定义自己的安全系统。

https://devdocs.prestashop.com/1.7/modules/concepts/controllers/front-controllers/#using-a-front-controller-as-a-cron-task

mymodule/controllers/front/cron.php:

<?php

class MyModuleCronModuleFrontController extends ModuleFrontController
{

    /** @var bool If set to true, will be redirected to authentication page */
    public $auth = false;

    /** @var bool */
    public $ajax;

    public function display()
    {
        $this->ajax = 1;

        //my functionality goes here

        $this->ajaxDie("OK.");
    }

}

触发功能的链接将是:

http://localhost/index.php?fc=module&module=mymodule&controller=cron

想知道为什么在 Google 搜索期间没有出现官方文档。

于 2021-09-24T07:52:57.863 回答