0

在我有的路线中

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/callbackOpauth/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扩展插件,所有工作都使用插件。不仅适用于这种情况。这两个插件的用户如何绕过这种情况。

4

1 回答 1

1

我通过SecurityOpauth我的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;
   }
   // ...
}

PS 将方法更改为 Sessions 有其缺点,您可以在Github Opauth 问题 #16上查看评论

于 2013-05-26T21:20:11.737 回答