我在这里遇到了一个非常奇怪的情况,我希望 SO 的集体知识可以提供帮助。
我正在开发一个遗留的 CakePHP 1.3 应用程序,使用本机Auth
组件来保护大多数应用程序页面。但是,任何人都可以访问公共页面,并在其控制器中使用$this->Auth->allow()
现在,我们有了一个 URL(使用 Cake 的Router
类),如果在浏览器中输入它,它会直接进入预期的页面,并且一切正常。
但是,如果您使用该 URL 作为href
锚标记并单击该链接,您将被弹回到我们的应用程序的登录页面,就像您访问了一个私有 URL 一样。
我不确定我目前是否可以提供确切的 URL,因为这是基于客户端的公共页面,而不是一般公共页面
我们一直在调试路由,并且知道它会在到达最终控制器操作时立即重定向,而不是在继承链中的更高位置。
环境注意事项:
- 处理这个 URL/action 的控制器继承自另一个设置我们的公共页面系统的控制器
- 它在 CakePHP 插件中,而不是直接控制器
- 它的 CakePHP 1.3
- 这只发生在非 IE 浏览器中。IE根本不显示这个问题
有没有人遇到过类似的事情并有解决方案?
按照评论中的要求,我分享了一些代码。为简洁起见,对其进行了大量编辑,但并不完整
公共控制器App::import('Controller', 'Events.Bookings');
class PublicBookingsController extends BookingsController
{
public function beforeFilter()
{
parent::beforeFilter();
$this->Auth->allow('*');
}
}
预订控制器
class BookingsController extends EventsAppController
{
public new_booking()
{
die('Reached new booking');
}
}
事件应用控制器
App::import('Controller', 'Occurrence');
class EventsAppController extends OccurrenceController
{
public function beforeFilter()
{
parent::beforeFilter();
// various plugin set up code
}
}
发生控制器
class OccurrenceController extends AppController
{
public function beforeFilter()
{
parent::beforeFilter();
// generic plugin setup code snipped
}
}
路线
Router::connect('/path/to/url', array('plugin' => 'events', 'controller' => 'public_bookings', 'action' => 'new_booking');