I'm sending data from a form with AJAX. The data is a username and password of the user, and therefore I want to make it as secure as possible. I'm trying to use a `token` as an extra security layer, but it always return as "**invalid**". I've gone through https://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms and can't see that anything should be wrong. My login form: <form method="post" action="#" id="userForm"> <label for="username">Brugernavn</label> <input type="text" value="" name="username"> <label for="password">Password</label> <input type="password" value="" name="password"> <?php echo JHtml::_( 'form.token' ); ?> <button id="login-user">Login</button> </form> The AJAX request: jQuery.ajax({ url: 'index.php?option=com_content&format=ajax&view=article&task=loginUser&tmpl=component', type: 'post', dataType: 'html', data: { form: jQuery(form).serializeArray() }, async: true, success: function(response){ console.log(response); var result = response; if ( result.loggedIn == 1 ) { //User logged in jQuery('#loginModal').modal('hide'); } else { //User not logged in } } }); The function that gets called in my `view.ajax.php` public function _logInUser( $form ){ $options = array(); $credentials = array(); var_dump($form); JSession::checkToken() or die( 'Invalid Token' ); $credentials['username'] = $form[0]['value']; $credentials['password'] = $form[1]['value']; $result = JFactory::getApplication()->login($credentials, $options); $result = ($result) ? 1 : 0; //1 - logged in //0 - not logged in echo json_encode( array('loggedIn' => $result) ); jexit(); } And the output in my console from `var_dump($form);` array(3) { [0]=> array(2) { ["name"]=> string(8) "username" ["value"]=> string(20) "[email protected]" } [1]=> array(2) { ["name"]=> string(8) "password" ["value"]=> string(8) "mypassword123" } [2]=> array(2) { ["name"]=> string(32) "dc56f674238905e70ab3d98f9bb6e2f0" ["value"]=> string(1) "1" } } Invalid Token The only thing else I can think of, is that `&format=ajax` or `dataType: 'html'` should be something like `json` or maybe `raw` ...but when I tried that, then the call dosen't work at all.