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 Users で、/example/callbackその後に続く別のプラグイン/example/auth/facebookは Opauth プラグインです。

エラーメッセージはこんな感じ

The request has been black-holed

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

これら 2 つのプラグインを連携させることは完全に可能です。ブラウザが を指すと/example/auth/facebook、にリダイレクトされ/example/auth/callback、何らかのopauth-complete方法で特定のメソッドにリンクするためのルートが必要になります。

app_usersプラグインを拡張し、プラグインを使用することが示されていない場合は、すべて機能します。このケースのみでは動作しません。これら 2 つのプラグインのユーザーは、このような状況をどのように回避できますか。

4

1 に答える 1

1

SecurityでコンポーネントオンOpauthアクションを無効にすることで解決しましたAppUsersController。Opauth は POST を使用してデータを転送するため、そのメソッドを変更する (つまり、セッション、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 メソッドをセッションに変更することには欠点があります。Github Opauth issue #16のコメントをご覧ください。

于 2013-05-26T21:20:11.737 に答える