我有路线
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
扩展插件,使用插件。仅适用于此情况。这两个插件的用户如何解决这种情况。
答案 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
处查看评论