0

我在这里遇到了一个非常奇怪的情况,我希望 SO 的集体知识可以提供帮助。

我正在开发一个遗留的 CakePHP 1.3 应用程序,使用本机Auth组件来保护大多数应用程序页面。但是,任何人都可以访问公共页面,并在其控制器中使用$this->Auth->allow()

现在,我们有了一个 URL(使用 Cake 的Router类),如果在浏览器中输入它,它会直接进入预期的页面,并且一切正常。

但是,如果您使用该 URL 作为href锚标记并单击该链接,您将被弹回到我们的应用程序的登录页面,就像您访问了一个私有 URL 一样。

我不确定我目前是否可以提供确切的 URL,因为这是基于客户端的公共页面,而不是一般公共页面

我们一直在调试路由,并且知道它会在到达最终控制器操作时立即重定向,而不是在继承链中的更高位置。

环境注意事项:

  1. 处理这个 URL/action 的控制器继承自另一个设置我们的公共页面系统的控制器
  2. 它在 CakePHP 插件中,而不是直接控制器
  3. 它的 CakePHP 1.3
  4. 这只发生在非 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');
4

0 回答 0