1

私の Cake 2.3 アプリには、ajax 経由で呼び出されるアクションがあります。私は Security コンポーネントを使用しているので、 を使用する必要$this->Security->unlockedActionsがありました。そうしないと、アクションが失敗します。

ただし、が呼び出されたunlockActions場合は機能しません。$this->Security->requireAuth()これはバグですか?CakePHP がセキュリティを処理する方法を誤解していますか?

unlockActionsオーバーライドしないのはなぜrequireAuthですか?

4

2 に答える 2

1

SecurityComponent::requireAuth()に保存されている必要なアクションの配列にそのアクションを追加しSecurityComponent::$requireAuthます。

セキュリティ コンポーネントのスタートアップ コードを見ると、ロックされていないアクションがチェックされる前に、配列SecurityComponent::_authRequired()をチェックするメソッドが呼び出されていることがわかります。アクションを承認する必要がある場合は、承認されていないことをアプリに伝えるよりも優先する必要があると思います。$requireAuth

ドキュメントに明確に記載されているように、これはまだバグ(または誤って文書化されている)と見なします。

アクション (例: ajax リクエスト) のすべてのセキュリティ チェックを無効にしたい場合があります。beforeFilter の $this->Security->unlockedActions にリストすることで、これらのアクションを「ロック解除」できます。

これは新しい機能であるため、混乱を説明するチケットを開いて、コア チームがそれについてどう考えているかを確認することをお勧めします。

ここで、ajax リクエストに対してセキュリティ コンポーネントを無効にすることが常に必要であるとは限らないことにも注意してください。CSRF チェックと ajax を並べて、セキュリティ コンポーネントを正常に使用するアプリがいくつかあります。

于 2013-02-07T15:09:20.240 に答える