6

ユーザーがトークンなしでページにアクセスしようとしているときに、ログイン ページへのリダイレクトを防止しようとしています。単一ページのアプリがあり、ファイアウォールの下に ajax リクエストを配置しているだけで、ユーザーがトークンなしで ajax を実行しているときに、ajax が返されるようにします。禁止された例外なので、クライアント側でキャッチできます

現在、リクエストがログインページにリダイレクトされているため、ajax は「Found」を返します。

私はこれまでクックブックで解決策を見つけていません.APIトークンを使用したくありません.ログインにリダイレクトする代わりに例外を送信するだけです.

4

1 に答える 1

8

entry_point許可されていない応答を返すには、ファイアウォールにを定義する必要があります。エントリ ポイントに関する情報は、こちらのドキュメントに記載されています。今後リクエストがあった場合に備えて、ここに段落をコピーします。

ユーザーがまったく認証されていない場合 (つまり、トークン ストレージにトークンがまだない場合)、ファイアウォールのエントリ ポイントが呼び出され、認証プロセスが「開始」されます。エントリ ポイントは、メソッド start() のみを持つ AuthenticationEntryPointInterface を実装する必要があります。このメソッドは、現在の Request オブジェクトと、例外リスナーがトリガーされた例外を受け取ります。メソッドは Response オブジェクトを返す必要があります。これは、たとえば、ログイン フォームを含むページ、または基本 HTTP 認証の場合は、ユーザーにユーザー名とパスワードを入力するように求める WWW-Authenticate ヘッダーを含む応答である可能性があります。

そのためには、サービスとして定義されるクラスを作成する必要があります。

次のようになります。

namespace MyBundle\Service;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;

class CustomEntryPoint implements AuthenticationEntryPointInterface
{

    public function start(Request $request, AuthenticationException $authException = null)
    {
        $response = new Response("", Response::HTTP_UNAUTHORIZED);

        return $response;
    }

}

そしてあなたのservices.ymlファイルで

services:
    service.entry_point:
        class: MyBundle\Service\CustomEntryPoint

最後に、ファイルのセクションでサービス IDservice.entry_pointentry_pointオプションに渡します。firewallsecurity.yml

これでうまくいくはずです。

于 2015-06-27T22:26:28.210 に答える