通过移动应用程序使用 Moodle 进行身份验证

2024-05-19

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

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

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

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

See also - 如何使用 Angular 从 Moodle Web 服务获取数据 https://stackoverflow.com/questions/39287594/getting-angular-to-work-with-a-moodle-webservice.


步骤 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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过移动应用程序使用 Moodle 进行身份验证 的相关文章

  • docker登录 - 存储凭据时出错 - 写入权限错误

    我正在运行一个docker login命令作为 Bamboo 构建作业的一部分 命令文本通过以下方式获得aws ecr get login调用并在子 shell 中执行 该命令失败并显示Error saving credentials er
  • Amazon S3:奇怪的错误 - “有时”签名不匹配,有时确实如此

    我正在为销售人员开发代码 我们正在使用 Appexchange 的 Force com for Amazon Web Services 应用程序 该应用程序由亚马逊提供 我正在计算机上从 Amazon S3 下载文件 有时我会收到下面提到的
  • Heroku 上的 Google Vision API 身份验证

    在 Heroku 上验证 Vision API 的最佳 简单方法是什么 在开发中我只使用 vision Google Cloud Vision new project instacult keyfile path to keyfile js
  • App Engine 的 Google Cloud Storage 身份验证

    我们希望开始使用 Google Cloud Storage 作为用户上传文件的持久存储 不幸的是 我无法添加应用程序标识 应用程序 ID appspot gserviceaccount com 到我们的 团队 因为我们的团队基于 Googl
  • Google App Engine 中的自定义身份验证

    有谁知道或知道我可以在哪里学习如何使用 Python 和 Google App Engine 创建自定义身份验证流程 我不想使用 Google 帐户进行身份验证 并且希望能够创建自己的用户 如果不是专门针对 Google App Engin
  • 每次页面重新启动时,Firebase.auth().currentUser 都会变为 null

    我正在使用 firebase 身份验证与 vue 应用程序 每次登录用户后重新启动页面时 currentUser 都会变为 null firebase auth signInWithEmailAndPassword this email t
  • 使用带有十六进制字符串的 CryptoJS

    我想连接到蓝牙设备 仅通过十六进制字符串进行通信 我需要编码一个 16 字节值 因此我也期望一个 16 字节的值 在我的实现中 CryptoJS 总是返回更长的结果 根据文档 不需要 IV 所有 16 字节数据必须使用当前存储在设备中的客户
  • Yii2 从 MySQL 中的表登录的分步指南

    我开始在 Yii2 中迈出第一步 到目前为止 我已经能够编写一个应用程序并将数据库中的表连接到它 就像我在 Yii1 中学到的那样 该表是contacts我的创建视图中的表单将数据发送到数据库 没有任何问题 问题是我只能在 Yii2 内置的
  • laravel 5.3 中如何在没有 auth:api 中间件的情况下对用户进行身份验证?

    我有一条任何用户都可以访问的公共路线 timeline 在此操作中 如果用户通过身份验证 我必须向他显示他是否喜欢该帖子 如果路线有auth api我可以使用中间件获得经过身份验证的用户 request gt user 但如果我不使用aut
  • Active Directory B2C 身份验证以及在数据库中创建/存储用户 ID

    我正在制作一个移动应用程序 并希望使用 AD B2C 内容来处理用户的身份验证 我需要将它们的数据存储在 SQL DB 中 该数据库也位于 Azure 上 我打算让我的应用程序使用 REST 与我要编写的一些函数进行通信 然后与数据库后端进
  • 为 ASP.NET MVC 实现自定义登录

    我是 ASP NET MVC 的新手 需要一些关于如何实现以下内容的建议 该站点是一个使用率很高的站点 内部 内联网 约有 200 个用户 我们使用表单身份验证来访问 SQL Server DB 不是 Windows 集成 有些操作受到保护
  • Magento 外部登录不会创建会话 cookie

    我正在尝试从外部站点替换 Magento 的相当笨拙的 ajax 登录 该网站使用 Magento 作为商店 站点和 magento 商店都有自己的登录信息 因此当用户登录时 两者同步非常重要 这是通过每次页面重新加载时进行 ajax 调用
  • Django:登录用户并在同一页面上刷新而不定义模板?

    我正在尝试使用引导下拉登录表单来让用户登录 我可以对我的用户名和密码进行硬编码并进行身份验证 但我试图在不进入登录屏幕的情况下让用户登录 这是我的代码 模板 我使用操作来调用 logUserIn url 以便表单可以发布到该视图 ul cl
  • Rails 和 Authlogic:每个用户只允许一个会话?

    有没有办法限制 Ruby on Rails 应用程序中的会话数量 我使用 Authlogic 进行身份验证 我希望每个用户帐户只允许 1 个会话 当同一用户登录另一台计算机时 先前的会话应该过期 失效 我正在考虑将会话数据存储在数据库中 然
  • Auth0 isAuthenticated() 始终为 false

    我正在使用 Extjs 并且我用过本教程 https github com auth0 samples auth0 javascript samples tree master 01 Login设置应用程序和 auth0 这是登录代码 us
  • Android Facebook SDK 4.5.0 登录注销问题,尝试再次登录时出现无效密钥哈希错误

    我按照中所述实现了 Facebook 登录按钮https developers facebook com docs facebook login android https developers facebook com docs face
  • Ember 数据保存方法,创建与更新

    我不明白 Ember 如何确定是否应该更新或创建记录 我认为它是基于 ID 或商店条目 但它似乎是其他东西 代码示例阐明了 this returns the user without making an api call currentUs
  • AWS Cognito 作为网站的 Django 身份验证后端

    我对 Cognito 的理解是 它可以用来代替本地 Django 管理数据库来对网站的用户进行身份验证 然而 我没有找到任何带有通过 Cognito 登录屏幕的基本 Hello World 应用程序的详细示例 如果有人可以发布一篇文章 逐步
  • 使用 Keycloak-proxy 进行 Zabbix HTTP 身份验证

    我尝试使用 keycloak proxy 将 Zabbix UI 与 Keycloak SSO 集成 我的设置如下 Nginx 是入口点 它处理 虚拟主机 将请求转发到 keycloak proxy Keycloak proxy配置了cli
  • Docker Hub API v2 令牌身份验证问题

    目前 我正在开发一个非常轻量级版本的 Docker 容器编排器 并且我必须能够从公共 Docker Hub 注册表获取图像摘要 我想使用 Docker Registry API v2 来实现此目的 我正在尝试使用以下 API 调用获取授权令

随机推荐