게시 요청의 매개 변수를 해독/암호화하기 위해 레일즈 앱용 사용자 지정 미들웨어를 작성하고 있습니다. 난 내가 매개 변수를 액세스하고 필요에 따라 조작 할 수 있어요이랙 사용자 지정 미들웨어 오류 "ActionDispatch :: Http :: Parameters :: ParseError"
rack_input = env['rack.input'].read
처럼 ENV의 OBJ를 읽고있다 요청 PARAMS을 읽으려면 'config/environments/staging.rb'
config.middleware.use CustomMiddleware
의 미들웨어를 구성했습니다. 그러나 내가 수신기 인 앱 객체에 env
obj를 넘겨 줄 때. 나는
Error occurred while parsing request parameters.
Contents:
F, [2017-11-15T02:13:50.230088 #24060] FATAL -- : [9aa25c7e-56e7-4894-ba30-3a01f60ae4fc]
F, [2017-11-15T02:13:50.230340 #24060] FATAL -- : [9aa25c7e-56e7-4894-ba30-3a01f60ae4fc] ActionDispatch::Http::Parameters::ParseError (no implicit conversion of nil into String):
F, [2017-11-15T02:13:50.230563 #24060] FATAL -- : [9aa25c7e-56e7-4894-ba30-3a01f60ae4fc]
F, [2017-11-15T02:13:50.230782 #24060] FATAL -- : [9aa25c7e-56e7-4894-ba30-3a01f60ae4fc] app/middleware/custom_middleware.rb:34:in `call'
내가 ENV 객체와 하드 코드 매개 변수를 읽을 수없는 경우 내 코드는 다음과
class CustomMiddleware
include Encryption
def initialize(app)
@app = app
end
def set_payload_params(env)
rack_input = env['rack.input'].read
@args = JSON.parse(rack_input) rescue {}
end
def call(env)
request = Rack::Request.new(env)
set_payload_params(env)
payload = @args['payload']
decrypt_params
status, headers, response = @app.call(env)
encrypt_params
end
처럼 다소, 아니이 전체 오류
"ActionDispatch::Http::Parameters::ParseError"
을 받고 없습니다입니다 그러한 파싱 오류. 그리고 내 컨트롤러가 하드 코드 매개 변수에 데이터로 응답하고 있습니다.
내 레일 버전이 5.1.4 내가 잘 작동하는 다른 레일 응용 프로그램 (4.2.8)에서 비슷한 미들웨어했을 2.4.2
내 루비 버전입니다.
이것에 대한 통찰력은 많은 도움이 될 것입니다. 미리 감사드립니다.