pytask/static/js/login.js
author Madhusudan.C.S <madhusudancs@gmail.com>
Tue, 18 Jan 2011 14:37:06 +0530
changeset 457 1082b5ee29c5
parent 450 7984094bf6c4
permissions -rw-r--r--
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.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
450
7984094bf6c4 Add the necessary Javascript to implement in place login functionality.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     1
var login_user = function (login_url) {
457
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
     2
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
     3
  /* Function that handles the post login request changes. */
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
     4
  var process_login_response = function (raw_data) {
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
     5
    /* We expect an exception when login fails. Read comment with catch. */
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
     6
    try {
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
     7
      data = $.parseJSON(raw_data);
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
     8
      if (data.authentication == "success") {
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
     9
        /* Login succeeded */
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    10
        if (data.markup) {
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    11
          /* Replace the HTML with the user actions since
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    12
           * the request came from a URL other than logout page */
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    13
          $("div#useraction").replaceWith(data.markup);
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    14
        } else if (data.redirect) {
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    15
          /* Reload the page to the pytask home page since
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    16
           * the login request came from logout page. This
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    17
           * is done because the logout text says you have
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    18
           * been logged out, which will be awkward after
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    19
           * user re-logs in. */
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    20
          window.location.href=data.redirect;
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    21
        }
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    22
      }
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    23
    } catch (e) {
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    24
      /* Login failed so the login view returned to the same view as
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    25
       * the existing page from which the call was made and thus we
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    26
       * get html. So let us display the error. */
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    27
      $('div #loginform #error').show();
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    28
    }
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    29
  }
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    30
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    31
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    32
  /* Attach a handler which does the form post upon the submit
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    33
   * button is pressed on the login form. */
450
7984094bf6c4 Add the necessary Javascript to implement in place login functionality.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    34
  $(document).ready(function () {
7984094bf6c4 Add the necessary Javascript to implement in place login functionality.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    35
    $('#form_login').submit(function() {
7984094bf6c4 Add the necessary Javascript to implement in place login functionality.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    36
      $.post(
7984094bf6c4 Add the necessary Javascript to implement in place login functionality.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    37
        login_url,
7984094bf6c4 Add the necessary Javascript to implement in place login functionality.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    38
        $("#form_login").serialize(),
457
1082b5ee29c5 Handle all cases of login.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 450
diff changeset
    39
        process_login_response);
450
7984094bf6c4 Add the necessary Javascript to implement in place login functionality.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    40
      return false;
7984094bf6c4 Add the necessary Javascript to implement in place login functionality.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    41
    });
7984094bf6c4 Add the necessary Javascript to implement in place login functionality.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    42
  });
7984094bf6c4 Add the necessary Javascript to implement in place login functionality.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    43
}