はい、Voter tutorial in cookbookがあります。しかし、私は少し違うものを探しています。私は、ユーザーのIPがデータベースにあるかどうかを確認すること投票者を書いた Symfony2でIPブラックリストを作成するには?
にログインするために特定のIPを拒否
- サイト全体にアクセスするために、特定のIPを拒否:私はブラックリストの2つの異なる層が必要です。
if (VoterInterface::ACCESS_DENIED === $this->voter->vote($token, $this, array())) { throw new AccessDeniedHttpException('Blacklisted, punk!'); }
最初の問題は、私は本当にそうでない、
TokenInterface $token
を使用するように私を強制され、VoterInterface
自体にある:最初のシナリオでは、私はすべての要求を確認し、それが禁止されたユーザに遭遇した場合には403を投げカーネルリスナーを書きましたこの場合の必要性。しかし、それは私が推測するほど重要ではありません。次の事は、実際にAccessDeniedHttpException
を使用しなければならないということです。AccessDeniedException
は常に私をログインページにリダイレクトしようとし、この場合エンドレスリダイレクトループを引き起こします。それはdev
環境で正常に動作しますように私はそれと一緒に暮らすと思いますが、私はprod
に切り替えたとき、私はPRODログに次のように503を得続ける:[2011-11-21 20:54:04] security.INFO: Populated SecurityContext with an anonymous Token [] []
[2011-11-21 20:54:04] request.ERROR: Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: Blacklisted, punk! (uncaught exception) at xxx line 28 [] []
[2011-11-21 20:54:04] request.ERROR: Exception thrown when handling an exception (Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: Blacklisted, punk!) [] []
私が何を読んでから、それはに問題があるかもしれませんxdebug、しかし私はそれをオフにしても起こります。私もバニラを試しました
\Exception
と同じことをします。なぜそれが起こるのか誰でも知っていますか?そのようなブラックリストのケースのための他の解決策かもしれません。また、トークンが割り当てられる前にユーザーを停止する方法がわからないため、2番目のケースを解決する方法はわかりません。現在の解決策はInteractiveLoginEventを扱っており、ユーザーがブラックリストに登録されているかどうかを確認し、ブラックリストに登録されている場合はトークンを削除します。それは安全なものではないようで、私はそれを本当に心地よくはありません。だから、どのようにこの問題を解決するためのアイデアですか?私はちょうどいくつかの明白な "事前ログインイベント"が欠落していると思います。
のために大丈夫です、あなたは括弧の間に例外が処理された例外またはスローされる例外であると思いますか? – greg0ire
私はそれが処理されていると言うでしょうが、何らかのループが起こっていないと思っていました。 –
コードで「処理時に例外がスローされる」を検索すると、2番目のオプションが表示されます。=>ループがあります – greg0ire