{"record":{"id":"7366e8e2be4683f5","repo":"instructure/canvas-lms","slug":"no-payload-found-in-cache","errorCode":null,"errorMessage":"no payload found in cache","messagePattern":"no payload found in cache","errorType":"exception","errorClass":"InvalidLaunch","httpStatus":400,"severity":"error","filePath":"app/controllers/lti/ims/authentication_controller.rb","lineNumber":205,"sourceCode":"        decoded_jwt[\"canvas_domain\"]\n      end\n\n      # Overrides method in Lti::Concerns::ParentFrame; used by set_extra_csp_frame_ancestor!\n      def parent_frame_context\n        decoded_jwt[\"parent_frame_context\"]\n      end\n\n      def context\n        @context ||= begin\n          model = decoded_jwt[\"context_type\"].constantize\n          model.find(decoded_jwt[\"context_id\"])\n        end\n      end\n\n      def cached_launch_with_nonce\n        @cached_launch_with_nonce ||= begin\n          launch_payload = fetch_and_delete_launch(context, verifier)\n          raise InvalidLaunch, \"no payload found in cache\" if launch_payload.nil?\n\n          Lti::Messages::JwtMessage.cached_hash_to_launch(JSON.parse(launch_payload), oidc_params[:nonce])\n        end\n      end\n\n      def launch_parameters\n        @launch_parameters ||= id_token.merge({\n          state: oidc_params[:state],\n          lti_storage_target:\n        }.compact)\n      end\n\n      def lti_storage_target\n        return nil unless decoded_jwt[\"include_storage_target\"]\n\n        Lti::PlatformStorage::FORWARDING_TARGET\n      end\n","sourceCodeStart":187,"sourceCodeEnd":223,"githubUrl":"https://github.com/instructure/canvas-lms/blob/1c9f0bb8013ed69c4f2efe11fd483025469b7e6c/app/controllers/lti/ims/authentication_controller.rb#L187-L223","documentation":"Guard in Lti::IMS::AuthenticationController#cached_launch_with_nonce: fetch_and_delete_launch found no cached launch payload in Redis/cache for the given context + verifier, meaning the LTI launch was already consumed, expired, or the verifier is wrong. Raised as InvalidLaunch during OIDC third-party-initiated launches.","triggerScenarios":"Thrown at app/controllers/lti/ims/authentication_controller.rb:205 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Restart the OIDC login flow to get a fresh verifier/launch payload","Avoid replaying the same verifier; payloads are deleted on first use","Check for clock/caching issues that expire the payload prematurely"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"1c9f0bb8013ed69c4f2efe11fd483025469b7e6c","analyzedAt":"2026-09-15T20:33:18.891Z","contentChangedAt":"2026-09-15T20:33:18.891Z","schemaVersion":2},"datasetVersion":"2026-09-23T02:17:17.105Z"}