我根据www.cakephp.org网站上的acl教程实现了安全性。我试图找出哪一行代码负责将用户重定向到登录页面,如果他们还没有登录。作为测试,我在app_controller.php中注释了几行来自beforefilter()函数所以它现在看起来像这样:
function beforeFilter() {
//Configure AuthComponent
$this->Auth->authorize = 'actions';
$this->Auth->actionPath = 'controllers/';
// $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
// $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
// $this->Auth->loginRedirect = array('controller' => 'alerts', 'action' => 'home');
// $this->Auth->loginRedirect = array('controller' => 'schedules', 'action' => 'index');
$this->Auth->allowedActions = array('display');
}
但我仍然被重定向到登录页面。
我问这个的原因是因为我的cakephp网站是通过代理服务器提供的,我需要使用相对url引用,但登录重定向是使用绝对引用。
答案 0 :(得分:1)
实际重定向在AuthComponent :: startup()中完成。在那里调用AuthComponent :: isAuthorized(),在你的情况下(配置了Acl),将使用Acl进行检查。
对beforeFilter()中的设置进行更改不会对行为产生任何影响。很可能,你没有通过Acl-> check()并在第450行重定向。
请参阅此处 - https://github.com/cakephp/cakephp/blob/master/cake/libs/controller/components/auth.php#L309和https://github.com/cakephp/cakephp/blob/master/cake/libs/controller/components/auth.php#L450
要处理与重定向相关的问题,请查看可能重写的Helper :: url()。创建一个app / app_helper.php,定义一个扩展Helper的类AppHelper ...并提供一个url方法。检查传递的参数,返回相应的url。