前言
在现今互联网时代,教育行业也逐渐数字化、智能化,利用 LTI(Learning Tools Interoperability)进行在线学习、智能评估等方面成为越来越普遍的需求。
在本篇文章中,我们将介绍一个很有用的 npm 包 @dinoboff/ims-lti,以及如何在前端项目中使用它来进行 LTI 相关操作。
@dinoboff/ims-lti 初探
@dinoboff/ims-lti 是一个基于 Node.js 的实现 LTI 版本 1.1 和 1.3 的库,提供了非常丰富的 LTI 功能。
这个库支持使用 Consumer Key 和 Consumer Secret 建立 LTI 连接,支持 LTI 1.3 的 OIDC Flow 连接和使用 JWT 认证,同时支持 LTI 中包含的消息类型,如 Launch、Auth、Outcome 等,在应用场景上也具有很大的可扩展性和可用性。
这个库已经被大量的教育类公司、项目使用,能够满足很多教育应用场景,值得我们进一步探究。
@dinoboff/ims-lti 安装
使用 @dinoboff/ims-lti,首先要在你的项目中安装它,你可以使用 npm 或者 yarn 安装。在终端中输入以下命令即可进行安装:
npm install @dinoboff/ims-lti --save
或者
yarn add @dinoboff/ims-lti
使用 @dinoboff/ims-lti
在你的前端项目中,为了能够使用 @dinoboff/ims-lti,你需要引入这个库,然后创建一个 LTI 对象。在实践中,我们一般需要考虑以下四个方面:
- 配置参数(Config)
- 验证消息参数(Validate Message)
- 处理请求参数(Process Request)
- 发送结果参数(Send Result)
下面我们一一来看这四个方面的实现方法。
配置参数(Config)
当我们在使用 @dinoboff/ims-lti 的时候,需要对 LTI 连接进行配置。这个库提供了一个 Lti 配置对象,我们在创建 Lti 对象时,将这些配置参数传入。以下是一个示例代码片段:
-- -------------------- ---- ------- ----- - --- - - ----------------------------- ----- --- - --- ----- ------------ --------------- --------------- ------------------ ------------ ----------------------------------- ----- - ------- ------------------------ --------- ------------ ------------- ---------------- ------------ ------------------------------------- -- ---
上述代码中,我们首先从 @dinoboff/ims-lti 中引入 Lti 对象,然后在创建 Lti 对象时,通过传入相应的配置参数来配置操作。
在这个示例代码中,我们需要提供多个参数:
consumerKey
:消费者密钥consumerSecret
:消费者密钥验证providerUrl
:LTI 连接提供者 URLoidc
:LTI OIDC 配置参数
当我们有这些配置信息之后,我们就可以进行其他操作了。
验证消息参数(Validate Message)
在处理 LTI 消息时,我们一般会用到验证消息的功能,来确保 LTI 请求者是合法的,这很重要。使用 @dinoboff/ims-lti,你可以很方便地进行消息验证。以下是一个示例代码片段:
-- -------------------- ---- ------- ----- - --- - - ----------------------------- ----- --- - --- ----- ------------ --------------- --------------- ------------------ ------------ ----------------------------------- ----- - ------- ------------------------ --------- ------------ ------------- ---------------- ------------ ------------------------------------- -- --- -- ---- ----- ------- - ---------------------------- --------- -- ---------- - ---------------------- --- ------- ---------- ---- ------- ------------- ------- -
上述代码中,validateMessage
方法被传入一个请求体和一个请求头的哈希表或者一个 Express 请求对象。这个方法会对请求体和请求头进行验证并返回一个布尔值来表示请求是否是 LTI 请求。如果验证失败,将会抛出异常。
需要注意的是,在验证消息的时候,我们一定要先创建 Lti 对象,然后再使用这里面的方法。
处理请求参数(Process Request)
当我们进行 LTI 操作时,除了要验证消息,还需要根据 LTI 请求的不同参数,进行不同的操作。例如,处理 basiclti-launch-request
里面的参数用来启动学习应用程序。
使用 @dinoboff/ims-lti 库,你可以在 processRequest
方法里面进行 LTI 请求参数的处理。以下是一个示例代码片段:
-- -------------------- ---- ------- ----- - --- - - ----------------------------- ----- --- - --- ----- ------------ --------------- --------------- ------------------ ------------ ----------------------------------- ----- - ------- ------------------------ --------- ------------ ------------- ---------------- ------------ ------------------------------------- -- --- -- ---- --------------------------- --------- -------- -- - ---------------- ------- ------------ -------------- -- -------------- -- - -------------------- ---------- --- -------- ----------- ---
这个代码中,我们使用 Lti 对象上的 processRequest
方法,来进行 LTI 请求的参数处理。这个方法被传入一个请求体和一个响应对象,在请求处理完成之后,可以对响应对象进行操作。
发送结果参数(Send Result)
在处理完 LTI 请求之后,你可能需要将处理结果发送回 LTI 请求者。例如,发送一个学习分数,或者一个认证票据。通过 @dinoboff/ims-lti 库的 sendResult
方法,你可以方便地向 LTI 请求者发送结果参数。以下是一个示例代码片段:
-- -------------------- ---- ------- ----- - --- - - ----------------------------- ----- --- - --- ----- ------------ --------------- --------------- ------------------ ------------ ----------------------------------- ----- - ------- ------------------------ --------- ------------ ------------- ---------------- ------------ ------------------------------------- -- --- -- ------ --------------------------- -------- -- - ------------------- --- ------------ --------- -- -------------- -- - -------------------- ------- ------- ----------- ---
上述代码中,我们使用 Lti 对象上的 sendResult
方法来发送结果参数,这个方法被传入一个结果数组,可以将需要发送的结果放在这个数组里面。
总结
@dinoboff/ims-lti 是一个非常有用的 npm 库,它提供了非常详细、具有深度的 Lti 功能,并可以使用 LTI 版本 1.1 和 1.3,使用这个库,你可以轻松地进行 LTI 相关的操作。在本篇文章中,我们详细介绍了这个库的使用方法,包括配置参数、消息验证、请求参数处理和结果参数发送等。希望这篇文章对你有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055ff581e8991b448ddc74