Moodle authentication from a mobile app

My mobile app needs to log into Moodle to get the Json data from the web service and render it using Angular.

To do this, I need to pass in the username and password and return the Moodle web service token, so my app doesn't need to log in again (at least until the token expires).

(This is one of the "ask and answer your own question" questions, so my solution is below, but comments and suggestions are welcome.)

Thanks to all the other StackOverflow pages I have used to build this solution,

. See also - how to get the data from your Moodle web service using Angular .

0


source to share


1 answer


Step 1. Check if an existing token already exists

jQuery(document).ready(function () {

/* when the user clicks log-out button, destroy the session */

    $('#btn_logout').on('click', function () {
        $('.pane').hide();  /* hide all screens */
        $('#menu').toggleClass('ui-panel-open ui-panel-closed');
        $.jStorage.deleteKey('session');
        makeUserLogin();
    });

        var session = $.jStorage.get('session', ''); // syntax: $.jStorage.get(keyname, "default value")


        if (session) { // if  there is already a session, redirect to landing pane

             showApp();

        } else {   // if there is no session *then* redirect to the login pane

           makeUserLogin();

        }

});

      



Step 2. Create functions to show the application and redirect to the login page

function showApp() {
    $('#home-pane').show(); /* show home screen */
    $('#system-message').hide();
    $('#login-pane').hide();  /* hide login screen*/
    $('#menu_btn').removeClass('hidden'); /* show menu button so user can see rest of app */
}

function makeUserLogin() {

    $('#btn_login').click(function () {
        console.log('click event for login_button');

        var username = $('#username').val();
        var password = $('#password').val();

        postCredentials(username, password, createSession);

    });

    $('#menu_btn').addClass('hidden');  /* hide menu button so user cannot see rest of app */
    $('#home-pane').hide();  /* hide home screen */
    $('#login-pane').show(); /* show login screen */
}

function postCredentials(username, password, callback) {
    if ((username.length && password.length) && (username !== '' && password !='')) {

        var url = 'https://moodle.yourcompany.com/local/login/token.php';
        $.post(url, {
             username: username,
             password: password,
             service: 'webservice_ws' // your webservice name
         }).done(function (data) {
             token = data.token;
             dataString = JSON.stringify(data);
             if (dataString.indexOf('error') > 0) {
               showErrorDialog('<p class="error">Invalid user credentials, please try again</p>');
             }
             else {
                  createSession(token); 
             }

         }).fail(function () {
             showErrorDialog('<p class="error">Login failed</p>');
         });

    } else {
        showErrorDialog('<p class="error">Please enter a username and password</p>');
    }
}

function createSession(token) {

// syntax:  $.jStorage.set('keyname', 'keyvalue', {TTL: milliseconds}); // {TTL... is optional time, in milliseconds, until key/value pair expires}
    $.jStorage.set('session', token, { TTL: 28800000 });
// redirect to whatever page you need after a successful login
    showApp();
}

function showErrorDialog(errorMsg) {
    $('#system-message').html(errorMsg);
    $('#system-message').fadeIn();
}

      

+1


source







All Articles