路由指向扩展插件并使用扩展类的类时出现黑洞错误

时间:2013-05-26 20:02:30

标签: security cakephp cakedc

我有路线

Router::connect('/opauth-complete/*', array('controller' => 'app_users', 'action' => 'opauth_complete'));

如果我用其他任何东西改变指向控制器app_users的指针并创建控制器一切正常,没有错误。但我需要它与AppUsersController一起使用。

AppUsersController看起来像这样

App::uses('UsersController', 'Users.Controller');
class AppUsersController extends UsersController {  
    public function beforeFilter() {
        parent::beforeFilter();
        $this->User = ClassRegistry::init('AppUser');
    }
    // ...
    // ...
    public function opauth_complete() {
        die(1);
    }
    // ...
    // ...
}

因此,插件是CakeDC用户和另一个插件/example/callback是{OMPuth插件后的/example/auth/facebook

错误消息如下所示

The request has been black-holed

Error: The requested address '/example/opauth-complete' was not found on this server.

这很可能使这两个插件协同工作;当浏览器指向/example/auth/facebook时,它会重定向到/example/auth/callback,并以某种方式需要opauth-complete路由链接到特定方法。

所有工作如果没有指向app_users扩展插件,使用插件。仅适用于此情况。这两个插件的用户如何解决这种情况。

1 个答案:

答案 0 :(得分:1)

我通过在我的Security中停用Opauth操作上的AppUsersController组件解决了这个问题。事实是Opauth使用POST传输数据,您应该更改它的方法(即:使用Sessions,GET)或禁用安全组件。

对于方法更改,请在bootstrap.php或core.php

中使用
Configure::write('Opauth.callback_transport', 'session'); // you can try 'get' too

要按照我的方法将此添加到发生错误的控制器以及放置opauth_complete方法的位置

public function beforeFilter() {
   // ...
   if (isset($this->Security) && $this->action == 'opauth_complete') {
       $this->Security->validatePost = false;
       $this->Security->csrfCheck = false;
   }
   // ...
}

P.S。将方法更改为Sessions有其缺点,您可以在Github Opauth issue #16

处查看评论