Symfony 2 FOS User Bundle Bootstrap modal AJAX Login
I have found the solution. Here is what I added to my javascript,
<script> $(document).ready(function(){ $('#_submit').click(function(e){ e.preventDefault(); $.ajax({ type : $('form').attr( 'method' ), url : '{{ path("fos_user_security_check") }}', data : $('form').serialize(), dataType : "json", success : function(data, status, object) { if(data.error) $('.error').html(data.message); }, error: function(data, status, object){ console.log(data.message); } }); }); });</script>
And here is my onAuthenticationFailure
method from my handler,
public function onAuthenticationFailure(Request $request, AuthenticationException $exception) { $result = array( 'success' => false, 'function' => 'onAuthenticationFailure', 'error' => true, 'message' => $this->translator->trans($exception->getMessage(), array(), 'FOSUserBundle') ); $response = new Response(json_encode($result)); $response->headers->set('Content-Type', 'application/json'); return $response;}
I think that it was the URL from my Ajax method that was wrong. Thank you for your advices.
I guess what youre looking for is this: Symfony2 ajax login.
your javascript would look sth. like this:
$('#_submit').click(function(e){ e.preventDefault(); $.ajax({ type : $('form').attr( 'method' ), url : $('form').attr( 'action' ), data : $('form').serialize(), success : function(data, status, object) { if (data.sucess == false) { $('.modal-body').prepend('<div />').html(data.message); } else { window.location.href = data.targetUrl; } } });
You also have to modify the isXmlHttpRequest-part of your onAuthenticationSuccess-Method:
[...]if ($request->isXmlHttpRequest()) { $targetUrl = $request->getSession()->get('_security.target_path'); $result = array('success' => true, 'targetUrl' => targetUrl ); $response = new Response(json_encode($result)); $response->headers->set('Content-Type', 'application/json'); return $response; }[...]