can';t禁用CSRF组件或从android POST成功检查CSRF令牌

can';t禁用CSRF组件或从android POST成功检查CSRF令牌,android,cakephp-3.0,Android,Cakephp 3.0,自从CakePHP 3.0.4发布以来,我无法再从Android应用程序访问我的Web服务了 我在CsrfComponent.php()中探索了方法_validateToken(),它发现了一个空令牌 在等待了解Android端的操作时,我尝试使用文档中解释的以下停用: public function beforeFilter(Event $event) { $this->eventManager()->off($this->Csrf); } 不幸的是,问题仍然存在,

自从CakePHP 3.0.4发布以来,我无法再从Android应用程序访问我的Web服务了

我在CsrfComponent.php()中探索了方法_validateToken(),它发现了一个空令牌

在等待了解Android端的操作时,我尝试使用文档中解释的以下停用:

public function beforeFilter(Event $event)
{
    $this->eventManager()->off($this->Csrf);
}
不幸的是,问题仍然存在,无论如何,我看到在返回令牌的get请求中,csrf令牌不再存在。因此,上面的调用似乎做了一些事情,但为什么它不阻止令牌检查

如果我不加载CSRF组件,一切都会顺利


所以我对任何能帮助我在所有访问中仍然启用CSRF组件的想法都很感兴趣,因为有一个解决方案可以在某些请求中暂时禁用它,或者更好,一种通过android API 22传递CSRF令牌和CSRF头的方法,因为所有现有示例都使用不推荐的函数运行…

请确保您已从控制器和配置>routes.php禁用它

routes.php文件中代码行下方的注释:

$routes->registerMiddleware('csrf', new CsrfProtectionMiddleware([
  'httpOnly' => true
]));

$routes->applyMiddleware('csrf');

我很确定这是一个全有或全无的问题,如果这个对象真的被取消订阅,那么你就不会再得到任何CSRF验证检查了。所以对于初学者,我建议在components
startup()
方法中添加一些调试输出,以检查它是否真的不再被调用。@ndm实际上最基本的事情是,从3.0.4开始,我不知道该怎么做,以便在我从Android执行POST请求时不会收到“无效CSRF令牌”错误消息。这在以前非常有效。我是否必须首先请求一个令牌来做蛋糕?如果你想使用CSRF保护功能,那么是的,你当然必须首先获得一个令牌(通过GET请求),如果它以前在没有启用CSRF组件的情况下工作,但在没有令牌的情况下发布时没有抛出错误,那么这就是一个错误。