【问题标题】:Authenticate with Moodle from a mobile app从移动应用程序使用 Moodle 进行身份验证
【发布时间】:2017-01-10 10:40:05
【问题描述】:

我的移动应用需要登录 Moodle 以从网络服务获取 Json 数据并使用 Angular 显示。

为此,我需要传入用户名和密码并取回 Moodle 网络服务令牌,因此我的应用不需要再次登录(至少在令牌过期之前)。

(这是“提出并回答你自己的问题”的事情之一,所以我的解决方案如下,但欢迎 cmets 和建议。)

感谢我用来创建此解决方案的所有其他 StackOverflow 页面!

另见 - how to get data from your Moodle webservice with Angular

【问题讨论】:

    标签: authentication moodle jstorage


    【解决方案1】:

    步骤 1. 检查令牌是否已存在

    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();
    
            }
    
    });
    

    第 2 步。创建功能以显示应用并重定向到登录页面

    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();
    }
    

    【讨论】:

    • 注:代码是“按原样”提供的,没有任何承诺它适合用途,也没有任何维护或支持承诺。
    猜你喜欢
    • 2019-01-25
    • 2015-11-22
    • 2017-02-07
    • 2011-06-01
    • 2022-07-31
    • 2014-02-10
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多