首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenEDX :使用它作为LTI提供程序时出错400

OpenEDX :使用它作为LTI提供程序时出错400
EN

Stack Overflow用户
提问于 2016-03-10 07:50:31
回答 1查看 427关注 0票数 2

我想在我的web应用程序中包括一些OpenEdx课程。为此,我决定使用OpenEDX支持的LTI协议(在上一版本中作为使用者和提供者)。

我的应用程序,作为LTI的消费者,已经整合了来自moodle提供商系统的一些内容,并取得了成功。

当我尝试使用相同的代码时,一切都正常工作,直到我通过post发送所有参数为止,openEDX将错误400响应到我的post请求。

为了进行测试,我使用了完全堆栈安装(Dogwood版本),我对其进行了一些修改,以便根据:lti.html启用LTI提供程序功能

然后,我按照文档在管理接口中配置LTI提供程序,以及从正式文档中的另一个页面构建我的LTI调用URL,它看起来像:0270f6de40fc

在我的帖子请求中,我发送了以下参数:

  • user_id
  • lis_person_name_given
  • lis_person_name_family
  • lis_person_name_full
  • lis_person_contact_email_primary
  • resource_link_id
  • tool_consumer_instance_guid
  • endpoint_url
  • oauth_version
  • oauth_consumer_key
  • oauth_signature
  • oauth_signature_method
  • oauth_timestamp
  • oauth_nonce

我已经证实了,所有这些参数都是正确发送的。

你知道错误是从哪里来的吗?

非常感谢!

编辑:我终于找到了问题所在。我错过了一些参数,这些参数在OpenEDX情况下只能在LTI中强制使用。如果它缺少mandorty参数,打开edx返回一个错误400。

On /lms/djangoapp/lti_provider/views.py:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-10-31 14:59:56

实际上,在发布时,您必须在LTI消费工具中指定所需的参数。

代码语言:javascript
复制
REQUIRED_PARAMETERS = [
  'user_id',
  'roles', 
  'context_id',
  'oauth_version',
  'oauth_consumer_key',
  'oauth_signature', 
  'oauth_signature_method', 
  'oauth_timestamp', 
  'oauth_nonce'
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35910549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档