Symfony 2のlogin_check後にリダイレクトを無効にする方法2
質問
ログインチェック後にリダイレクトを無効にする必要があります。なぜなら、ログインが成功したかどうかだけを取得する必要があるからです。送信 /login_check urlの後、適切なデータを教えてください。
/ログインはその後空白です。
extjs 4を使用してログインフォームをセットアップしようとしているため、ajax Postリクエストを検証する必要があります。 login_checkは、認証、ユーザーセッションを作成し、成功か失敗かを返す必要がありますが、どこにも転送されません。
私のlogin.html.twigは次のように見えます:
{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
{ success:true }
{% else %}
{ success: false }
{% endif %}
in security.yml:
firewalls:
main:
form_login:
provider: fos_userbundle
failure_path: null
failure_forward: false
解決
認証ハンドラーを作成します:
namespace YourVendor\UserBundle\Handler;
// "use" statements here
class AuthenticationHandler
implements AuthenticationSuccessHandlerInterface,
AuthenticationFailureHandlerInterface
{
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
if ($request->isXmlHttpRequest()) {
$result = array('success' => true);
return new Response(json_encode($result));
} else {
// Handle non XmlHttp request here
}
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
if ($request->isXmlHttpRequest()) {
$result = array('success' => false);
return new Response(json_encode($result));
} else {
// Handle non XmlHttp request here
}
}
}
ハンドラーをサービスとして登録します。
services:
authentication_handler:
class: YourVendor\UserBundle\Handler\AuthenticationHandler
ファイアウォールでサービスを登録します。
firewalls:
main:
form_login:
success_handler: authentication_handler
failure_handler: authentication_handler
これは、一般的なアイデアを与えるための大まかな例です。自分で詳細を把握する必要があります。あなたが立ち往生していて、さらなる説明が必要な場合は、質問にコメントに入れてください。例を詳しく説明しようと思います。
他のヒント
通常のSymfonyフローは、ログインしていない場合はログインページにリダイレクトすることです。これは、人間にとって正常に機能します。しかし、あなたはプログラム的な解決策を探しているようです。
「次のページ」がどうあるべきかを宣言するために、_target_pathをフォームに設定してみましたか? Symfonyはいつでもどこかであなたを転送しますが、どこかにどこかに設定することができます。
これらの2つのページは、ログインフォームの内側の仕組みを説明するのに役立ちました。
- フォームのログインをカスタマイズする方法 (_target_pathを検索)
- ハンドブックのセキュリティページ
所属していません StackOverflow