# HG changeset patch # User Madhusudan.C.S # Date 1295341626 -19800 # Node ID 1082b5ee29c50389fba394ed69bf3b3362f672d6 # Parent da6f5be330873bd45c4a95013f4c142b6748dea6 Handle all cases of login. Firstly refactor the code to move all the post login mechanisms to a function of its own. Then add support to redirect the user if the login was attempted from logout page. Finally if the post response we got contains html, it is not a valid JSON, which means the login failed. In this case catch the exception and show the login error. diff -r da6f5be33087 -r 1082b5ee29c5 pytask/static/js/login.js --- a/pytask/static/js/login.js Tue Jan 18 14:34:26 2011 +0530 +++ b/pytask/static/js/login.js Tue Jan 18 14:37:06 2011 +0530 @@ -1,17 +1,42 @@ var login_user = function (login_url) { + + /* Function that handles the post login request changes. */ + var process_login_response = function (raw_data) { + /* We expect an exception when login fails. Read comment with catch. */ + try { + data = $.parseJSON(raw_data); + if (data.authentication == "success") { + /* Login succeeded */ + if (data.markup) { + /* Replace the HTML with the user actions since + * the request came from a URL other than logout page */ + $("div#useraction").replaceWith(data.markup); + } else if (data.redirect) { + /* Reload the page to the pytask home page since + * the login request came from logout page. This + * is done because the logout text says you have + * been logged out, which will be awkward after + * user re-logs in. */ + window.location.href=data.redirect; + } + } + } catch (e) { + /* Login failed so the login view returned to the same view as + * the existing page from which the call was made and thus we + * get html. So let us display the error. */ + $('div #loginform #error').show(); + } + } + + + /* Attach a handler which does the form post upon the submit + * button is pressed on the login form. */ $(document).ready(function () { $('#form_login').submit(function() { $.post( login_url, $("#form_login").serialize(), - function (raw_data) { - data = $.parseJSON(raw_data); - alert(data); - if (data.authentication == "success") { - $("div#useraction").replaceWith(data.markup); - alert(data.markup); - } - }); + process_login_response); return false; }); });