diff --git a/lti/adapters.py b/lti/adapters.py index fd0b3462..0214864b 100644 --- a/lti/adapters.py +++ b/lti/adapters.py @@ -77,7 +77,13 @@ class DjangoMessageLaunch: """Validate the LTI launch message""" from pylti1p3.message_launch import MessageLaunch - message_launch = MessageLaunch(self.lti_request, self.tool_config, session_service=self.launch_data_storage, cookie_service=self.launch_data_storage) + # Create custom MessageLaunch that properly implements _get_request_param + class CustomMessageLaunch(MessageLaunch): + def _get_request_param(self, key): + """Override to properly get request parameters""" + return self._request.get_param(key) + + message_launch = CustomMessageLaunch(self.lti_request, self.tool_config, session_service=self.launch_data_storage, cookie_service=self.launch_data_storage) return message_launch diff --git a/lti/views.py b/lti/views.py index 833cc06b..80fa4a7f 100644 --- a/lti/views.py +++ b/lti/views.py @@ -219,7 +219,14 @@ class LaunchView(View): # Validate JWT and get launch data session_service = DjangoSessionService(request) cookie_service = DjangoSessionService(request) - message_launch = MessageLaunch(lti_request, tool_config, session_service=session_service, cookie_service=cookie_service) + + # Create custom MessageLaunch that properly implements _get_request_param + class CustomMessageLaunch(MessageLaunch): + def _get_request_param(self, key): + """Override to properly get request parameters""" + return self._request.get_param(key) + + message_launch = CustomMessageLaunch(lti_request, tool_config, session_service=session_service, cookie_service=cookie_service) # Get validated launch data launch_data = message_launch.get_launch_data()