我想在我的 Web 应用程序中加入一些 OpenEdx 课程。为此,我决定使用 OpenEDX 支持的 LTI 协议(在上一个版本中作为消费者和提供者)。
我的应用程序,作为 LTI 消费者,已经成功地集成了 moodle LTI 提供者系统中的一些内容。
当我尝试使用相同的代码时,一切正常,直到我通过 post 发送所有参数,openEDX 向我的 post 请求响应错误 400。
为了进行测试,我使用的是全栈安装(Dogwood 版本),我根据以下内容对其进行了一些修改以启用 LTI 提供程序功能:http ://edx.readthedocs.org/projects/edx-installing-configuring-and-running /en/latest/configuration/lti/enable_lti.html
然后我按照文档在管理界面中配置 LTI 提供程序,以及官方文档中的另一个页面来构建我的 LTI 调用 URL,如下所示:http: //192.168.33.10/lti_provider/courses/course-v1 :edX+DemoX+ Demo_Course/block-v1:edX+DemoX+Demo_Course+type@vertical+block@vertical_0270f6de40fc
在我的帖子请求中,我发送了这些参数:
- 用户身份
- lis_person_name_given
- lis_person_name_family
- lis_person_name_full
- lis_person_contact_email_primary
- resource_link_id
- tool_consumer_instance_guid
- 端点网址
- oauth_version
- oauth_consumer_key
- oauth_signature
- oauth_signature_method
- oauth_timestamp
- oauth_nonce
我已经验证,所有这些参数都正确发送。
你知道错误可能来自哪里吗?
非常感谢!
[编辑:]我终于找到了问题所在。我错过了一些仅在 OpenEDX 案例中强制使用的 LTI 中推荐的参数。如果它错过了一个mandorty参数,打开edx返回一个错误400。
在 /lms/djangoapps/lti_provider/views.py 上:
REQUIRED_PARAMETERS = [
'roles', 'context_id', 'oauth_version', 'oauth_consumer_key',
'oauth_signature', 'oauth_signature_method', 'oauth_timestamp',
'oauth_nonce', 'user_id'
]
""" code which return error 400
params = get_required_parameters(request.POST)
if not params:
return HttpResponseBadRequest()
def get_required_parameters(dictionary, additional_params=None):
"""
Extract all required LTI parameters from a dictionary and verify that none
are missing.
:param dictionary: The dictionary that should contain all required parameters
:param additional_params: Any expected parameters, beyond those required for
the LTI launch.
:return: A new dictionary containing all the required parameters from the
original dictionary and additional parameters, or None if any expected
parameters are missing.
"""
params = {}
additional_params = additional_params or []
for key in REQUIRED_PARAMETERS + additional_params:
if key not in dictionary:
return None
params[key] = dictionary[key]
return params