- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试登录时,请求被 Security
组件屏蔽。我怎样才能让它正常工作?
我有一个简单的登录表单
<div class="container container-login">
<h2><?php echo __('Login'); ?></h2>
<div class="wrap-form-signin">
<?php
echo $this->Form->create('User', array('action' => 'login', 'class' => 'form-signin'));
echo $this->Form->input('username', array('label' => '', 'placeholder' => __('Email')));
echo $this->Form->input('password', array('label' => '', 'placeholder' => __('Password')));
echo $this->Form->submit(__('Login'));
echo $this->Form->end();
?>
</div>
</div>
Controller 操作如下:
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirectUrl());
} else {
$this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
}
}
}
并且Security
组件包含在AppController
public $components = array('Security', ... );
在 error.log 中我得到:
2013-03-29 13:40:58 Error: [BadRequestException] The request has been black-holed
Request URL: /users/login
Stack Trace:
#0 C:\wamp\www\cdx\lib\Cake\Controller\Component\SecurityComponent.php(234): SecurityComponent->blackHole(Object(UsersController), 'auth')
#1 [internal function]: SecurityComponent->startup(Object(UsersController))
#2 C:\wamp\www\cdx\lib\Cake\Utility\ObjectCollection.php(131): call_user_func_array(Array, Array)
#3 [internal function]: ObjectCollection->trigger(Object(CakeEvent))
#4 C:\wamp\www\cdx\lib\Cake\Event\CakeEventManager.php(247): call_user_func(Array, Object(CakeEvent))
#5 C:\wamp\www\cdx\lib\Cake\Controller\Controller.php(670): CakeEventManager->dispatch(Object(CakeEvent))
#6 C:\wamp\www\cdx\lib\Cake\Routing\Dispatcher.php(183): Controller->startupProcess()
#7 C:\wamp\www\cdx\lib\Cake\Routing\Dispatcher.php(161): Dispatcher->_invoke(Object(UsersController), Object(CakeRequest), Object(CakeResponse))
#8 C:\wamp\www\cdx\app\webroot\index.php(92): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#9 {main}
我怎样才能找到是什么让我的请求进入黑洞?
当我尝试使用自定义黑洞处理程序时,错误类型为auth
。但这就是我能得到的所有信息
我的CakePHP版本是2.3.1
编辑:无需 Security
组件即可正常登录。将其添加到 AppController
后,登录停止工作。
编辑2:我的表单中没有任何data[_Token][key]
字段
编辑3解决方案:我团队中的某人重写了 HTMLHelper 类,并且它在 _tags 数组中丢失了“hiddenblock”,从而导致丢失 _Token 字段。有关详细信息,请参阅我和 thaJeztah 的回答以及下面的评论
最佳答案
您按照什么顺序添加组件?安全组件应该放置在 startup()
中处理表单数据的其他组件之前:
“如果您正在使用安全组件的表单保护功能以及在其startup()回调中处理表单数据的其他组件,请务必将安全组件放置在 $components 数组中的这些组件之前。”
因为 AuthComponent 确实处理 startup()
内的表单数据,我认为这适用,因此请确保 SecurityComponent 位于 $components 数组中的 AuthComponent 之前;
public $components = array(
'Security',
'Session',
'Auth' => array(
// auth component settings
)
);
OP 发布的“最终”答案明确表示这个问题无法得到回答。事实证明,团队中的某人对 HtmlHelper 进行了修改,导致它不输出“隐藏” block ,因此不输出 CSRF token 。
在正常情况下,您永远不应该对 CakePHP 框架文件本身进行修改。 CakePHP 提供了覆盖其功能(包括助手)的方法,而无需修改“核心”CakePHP 文件。
例如,考虑一辆汽车。如果机械师不喜欢这个设计并决定“交换”制动踏板和 throttle 踏板怎么办?
当然,如果您我们知道这种修改,汽车仍然可以行驶。然而,如果没有这些重要信息,任何其他驾驶员肯定会崩溃(并且想知道到底发生了什么!?)
如果框架的默认行为不符合您的需求,请扩展这些类。不要修改框架文件本身(除非确实别无选择)。如果绝对有必要对框架进行修改,请务必与团队讨论并编写有关所做更改的文档。
请记住,如果不对更新版本应用相同的修改,将无法再将框架更新到较新的版本。同样,如果更改没有被记录下来,有人可能会更新 CakePHP 并破坏您的修改。
此外,如果您覆盖或修改 CakePHP,请确保覆盖与 CakePHP 的默认行为兼容,并且 CakePHP 的单元测试仍然正确运行(或者为修改创建新的单元测试) )
如果您需要自定义 CakePHP 帮助程序(或其他组件),可以使用多种选项来实现此目的,而无需修改 CakePHP 文件;
<强>1。扩展助手
class AwesomeHtmlHelper extends HtmlHelper {
/**
* enhanced tableHeaders method, outputs tableHeaders in a 'thead' tag
*
* {@inheritdoc}
*/
public function tableHeaders(array $names, array $trOptions = null, array $thOptions = null)
{
$output = parent::tableHeaders($names, $trOptions, $thOptions);
return '<thead>' . $output . '</thead>';
}
}
然后,按照常规方式使用您的 Helper:
echo $this->AwesomeHtml->tableHeaders(array('Date', 'Title', 'Active'));
<强>2。 “直接”替换 - 使用别名 (CakePHP > 2.3)
自 CakePHP 2.3 起,可以使用 Helper 的别名。此功能可用于以下情况(例如,您的应用程序中存在两个同名的助手(例如 Plugin.HtmlHelper))。
此外,这还允许您使用自己的 Helper 覆盖 CakePHP Helper。请参阅此处的文档:Using and Configuring Helpers
请注意,这将覆盖应用程序中所有的帮助程序!
public $helpers = array(
'Html' => array(
'className' => 'AwesomeHtml'
)
);
现在,$this->Html
实际上会引用您 View 中的 AwesomeHtmlHelper
:
echo $this->eHtml->tableHeaders(array('Date', 'Title', 'Active'));
将输出您的“增强型”表格标题
关于security - CakePHP安全组件黑洞登录(data[_Token][key]字段未生成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15704600/
我正在使用 Liip functional test bundle 在 Symfony 中创建一个功能测试. 我目前无法提交表单。 我正在尝试使用功能测试添加一个新的“日志”。 如果我尝试通过 UI
当我尝试登录时,请求被 Security 组件屏蔽。我怎样才能让它正常工作? 我有一个简单的登录表单 Form->create('User', array('acti
编辑: 提出这个问题后获得的一系列新见解告诉我问题是什么,它绝对与描述的服务器迁移没有任何关系。 给出的两个答案显示了如何为 CakePHP 2 和 3“修复”这个问题,但请记住这可能会带来安全风险。
我在 laravel 4.1 中做简单的 cms,我创建了许多表单并且它们工作正常,但我创建的最后一个表单在提交时抛出错误。 Illuminate \ Database \ Eloquent \ Ma
我有一个应用程序,客户端用 HTML 和 Angularjs 编写,服务器端用 Laravel 5 编写。每次提交表单时,我都会使用 $http 将模型发送到我的 laravel 5 应用程序,但我一
我不明白为什么 AJAX 请求 (XSRF-TOKEN) 的 token 与 _token 不同正常形式使用。此外,它更长。为什么?为什么有 2 个 token 呢?为什么不使用一个对 ajax 和普
我尝试更新我的表类别的记录,但它显示错误 Column not found: 1054 Unknown column '_token' 路线 Route::post('/categorias/edit
我是一名优秀的程序员,十分优秀!